a simple 3 layers application

یک نمونه برنامه 3 لایه دیگه ک بصورت ساده با کمک رابط OleDb با منبع داده ارتباط برقرار می کنه... نمونه کوچکی از یک دفترچه تلفنه ، از بانک اطلاعاتی MS Access بعنوان منبع داده استفاده می کنه ک فقط یک جدول ب نام Persons داره..
برنامه در 3 پروژه مجزا (بصورت لایه دسترسی به داده یا DAL و لایه منطق تجاری برنامه یا BLL و لایه نمایش یا PL) نوشته شده...سعی شده بصورت کلاسیک نوشته بشه و از تکنیکهای جدید مثل LINQ هم استفاده ای نشده! شاید توی ی sample ِ دیگه...!
در لایه تجاری ، کلاسهایی ب نام Provider (مثل clsPersonProvider) مسئول جوابگویی ب نیاز لایه نمایش هستن ، و در لایه DAL کلاسهایی ب نام Adapter (مثلا clsPersonAdapter) مسئول پاسخگویی ب نیازهای لایه BLL هستن..
تمام دسترسیها ب بانک (ک مسلما فقط در لایه DAL انجام می شه) از طریق یک کلاس static ب نام clsSingletonConnectionManager انجام می شه... (توسط الگوی singleton اینکار پیاده سازی شده تا همیشه فقط یک instance و یک پل ارتباطی ب بانک وجود داشته باشد..مزایا و معایب این روش رو خودتون پیدا کنید!)
Validation ِ ساده ای انجام شده، در setter ها...(هنگامی ک مقدار یک پراپرتی ، set می شه بررسی انجام می شه ک مقدار مورد نظر تهی نباشد و در این صورت یک Exception رو ایجاد می کنه)
(کلا در این قسمت می شه Validation هایی رو بر حسب نیاز انجام داد، در این برنامه ی نمونه خیلی از اینچنین مسائل برای سادگی بیشتر پیاده نشده!)
برای مثال ، برای گرفتن و نمایش دادن لیست کلیه Person ها ، در لایه نمایش دستور مربوطه صادر می شه و توسط personProvider_ ب لایه "منطق تجاری" فرستاده می شه:
private void show_All()
{
dataGridView1.DataSource = _personProvider.Get_All_Items();
}
این درخواست مجددا به لایه "دسترسی ب داده" ارسال می شه (توسط آبجکت personAdapter_) در اونجا لیست کلیه Person ها در آبجکتی از نوع DataTable ِ از پیش ساخته شده (TypedDataTable ، استفاده از TypedDataset , TypedDataTable ها مزایایی داره، مثلا مستقیما ب نام یک فیلد می شه دسترسی پیدا کرد در یک سطر یا همون StrongNaming و اینجور چیزا رو فراهم می کنن) ب نام dsPhonebook.PersonsDataTable
ریخته می شه (fill می شه) و این جدول برگشت داده می شه ب لایه BLL :
public dsPhonebook.PersonsDataTable Select_AllPersons()
{
return base.select_All(_QUERY_SELECTALL_Persons);
}
protected virtual T select_All(string pQuerySelectAll)
{
T retTable = new T();
OleDbDataAdapter da = new OleDbDataAdapter(pQuerySelectAll, clsSingletoConnectionManager.GetConnection2Phonebo ok);
da.Fill(retTable);
return retTable;
}
در این لایه (BLL) و در ادامه ، مقادیر برگشت داده شده ک در یک dsPhonebook.PersonsDataTable قرار دارن Cast می شن ب :
List<clsPersonEntity>
و این List در نهایت ب "لایه نمایش" برگشت داده می شه و در DataGridView مشاهده می شه..
با تشکر RED-C0DE~