دفترچه ی تلفن (نسخه جدید.برنامه نویسی لایه ای)، بخش دوم. لایه ها...

نوشته شده بوسیله تبسم 20. آبان 1388 19:36

سلام.

امیدوارم تونسته باشین فایل برنامه رو از پست قبل دانلود کرده باشین و موفق شده باشین ساختار و کدهای برنامه رو ببینین. چون دیگه تصویر رو نمی ذارم پس شما باید به کد مراجعه کنین و توضیحات رو تطبیق بدین. قصد دارم به صورت سوال و جواب کدها رو توضیح بدم،سوالهایی که ممکن براتون پیش بیاد.(سعی می کنم همه رو حدس بزنم!) اگه روشی بهتری به ذهنتون می رسه که می تونه بهتر کمک کنه خوشحال می شوم در جریان بذارینم.

دینگ دینگ: بعضی مفاهیم که مربوط به ساختارها و سینتکس های سی شارپ می شه رو در ادامه ی پست بحث مفاهیم می گم براتون.فعلا فقط باهاشون کار می کنیم.

خوب، بذار شروع کنیم:

1.معماری چند لایه چیه و اصلا چرا ازش استفاده می کنیم؟

توی برنامه نویسی مبحثی داریم به نام معماری چند لایه (n-tier) ، که متداولترینش معماری 4 لایه ست.یعنی چی؟ یعنی برنامه رو به 4 لایه، 3 بخش تقسیم می کنیم که این 4 لایه با هم در ارتباط هستند. ما می تونیم همه کدهامون رو توی همون فرم ها (Forms) و دکمه ها(Buttons) بنویسیم ،اما این کار وقتی پروژه کوچک و ساده ست، کار خوبی ایه، ولی وقتی برنامه بزرگتر می شه و کدها بیشتر می شن و همچنین صفحه هات و فرم هامون که با کاربر از طریقشون ارتباط برقرار می کنیم خیلی مفید نیست،نه اینکه برنامه تون کار نکنه، چرا، اما همونطور که توی پست قبل گفتم می شه اسپاگتی کد یعنی مثل رشته های ماکارانی کدها توی هم گره می خورن. پیدا کردن متغییرها و متدهایی که لازم دارین سختتر می شه،برای یه تغییر جزئی باید کلی بگردین و کلی جاها رو تغییر بدین،گاهی هم مجبور می شین یه متد رو چند جا توی صفحه ها یا فرم ها و دکمه های مختلف بنویسین و...

مهمترین علتی که لایه بندی رو انجام میدیم برای اینه که وظیفه هر بخش از برنامه جدا از هم تعریف میشه، یعنی یه لایه میشه مسئول برقراری ارتباط با پایگاه داده (لایه DAL)، یه لایه مسئول نمایش به کاربر (لایه Presentation) و همینطور تا آخر . برای همین وقتی که بخواین یه بخش رو یه مقدار عوض کنیم لایه های دیگه دست نمیخورن. مثلا اگه بخوایم یه برنامه تحت ویندوز رو به برنامه تحت وب تبدیل کنیم تنها لایه Presentation عوض میشه. یا مثلا اگه بخوایم دیتابیس رو از SQLServer ببریم روی Access یا برعکس، فقط لایه DAL عوض میشه.

بعلاوه اگه اشکالی در یه بخش بوجود بیاد کافیه دنبال اشکال توی همون بخش بگردین و اگه تغییر در یک لایه نیاز باشه شانس بیشتری دارین که حوزه تغییرات خیلی گسترده نشه و در همون لایه بمونه.

همچنین تیم ها یا افراد مستقل میتونن روی لایه های متفاوت به صورت موازی کار کنن، بدون اینکه بدونن لایه های دیگه دقیقا به چه صورت هستند و فقط کافی از نحوه ارتباط لایه خودشون با لایه های دیگه اطلاع داشته باشن.

یکی از مهمترین مزیت هایی که لایه ای کردنه پروژه مون داره افزایش امنیت داده های برنامه مونه. چطوری؟ خوب اول اینکه جلوتر برات خواهم گفت که یکی از این بخش ها برای ارتباط با داده هاست و فقط این بخشه که مستقیم به پایگاه داده مون دسترسی داره و ما از لایه ای که با کاربر سرو کار داره توسط یه لایه ی منطقی که شرایط امنیتی رو اونجا بیشتر روی موجودیت هامون (اشیامون،متغییرهامون) اعمال می کنیم، به این لایه دسترسی داریم. به علاوه ممکنه توی بعضی پروژه های بزرگ که نیاز به امنیت بالاتری دارن، لایه ها روی سیستم های جدا قرار بگیرن. که هر کسی اجازه ی دسترسی به سورس برنامه رو نداشته باشه.

البته لایه بندی برای برنامه نویسی های تحت وب، ASP.Net هم کاربردهای خوبی داره. هرجند که نوشتن چند تا کلاس اصافه شاید به نظر از معایبش بیاد اما در برابر سودی که این کلاس های اضافه با خودش همراه دارن قابل چشم پوشیه. علی الخصوص توی همین برنامه های تحت وب که تعداد صفحه هات زیادتر هستند.

حالا ما می آییم و برنامه رو به 3 قسمت تقسیم می کنیم و هر قسمت یه کاری برامون انجام می ده. اینطوری می دونیم برای هر تغییر یا موردی که نیاز داریم دقیقا کجا بریم .

2.لایه های معماری 3 لایه چی هستند و چی کار می کنن؟

۱) لایه پایگاه داده

2) لایه ی دسترسی به داده ها (Data Access Layer که به اختصار DAL نامیده میشه)
3) لایه ی منطقی (Business Logic Layer که به اختصار BLL نامیده میشه)
4) لایه نمایش (Presentation Layer)

لایه ی نمایش که همون رابط گرافیکی با کاربره (همون GUI)، یعنی مثلا اینجا فرم ها و آبجکت هایی که روش داریم، این لایه از طریق لایه ی BLL با لایه ی DAL ارتباط برقرار می کنه و به داده ها و در واقع پایگاه داده دسترسی پیدا می کنه.

پس از اونجایی که BLL نشون می ده ما چه موجودیت هایی توی برنامه داریم (مثلا توی این برنامه ما نام  و نام خانوادگی و شماره ها و ... رو داریم.)،اولین جایی توی کل برنامه ست که باید نوشته بشه. در واقع این لایه مسئول داده هاییه که بین لایه ی نمایش و لایه ی DAl ِ ، رد و بدل می شن. در واقع یه جور محافظت از داده هاست ، شروطی که لازمه روی اطلاعات اعمال بشه به لحاظ درجه ی اعتبارشون مثلا.

و بعد می رسیم به DAL ، توی این لایه ما کلا مواردی که به پایگاه داده ارتباط پیدا می کنه  و سر و کله زدن با داده هاست رو می نویسیم، مثل کانکشن ها و متدهایی مثل اضافه کردن و حذف کردن و خوندن اطلاعات و... در واقع این لایه ، واسط ما با پایگاه داده ست و از طریق این لایه داده ها رو از پایگاه می خونیم، روشون تغییرات خواسته شده رو مثل ِ مثلا پاک کردن و آپدیت کردن اعمال می کنیم و یا داده ها رو به پایگاه داده اضافه می کنیم. 

و حالا لایه ی نمایش از طریق یه آبجکت از جنس کلاس BLL اطلاعات رو از کلاس DALمی گیره یا بهش اطلاعات می فرسته .

لایه پایگاه داده هم که در واقع همون سیستم مدیریت پایگاه داده ای (DBMS) هست که باهاش کار میکنین (اسمش خارجیه ولی همون SQLServer یا Access یا Oracle میشن این لایه)

شکل زیر نمای کلی سیستم لایه بندی مرسوم 4 لایه ای رو نشون میده:

tierS

یه قانون خیلی مهم اینه که هرگز توی سیستم لایه بندی یه لایه نباید لایه بالای سر خودش رو صدا بزنه، همیشه ارتباط از بالا به پایینه و نه از پایین به بالا. یعنی هرگز لایه BLL نمیتونه تابعی از یک فرم رو که به لایه Presentation مربوطه رو صدا کنه یا یه چیز رو توش تغییر بده. چون اگه این اتفاق بیفته در صورتی که بخوایم لایه بالایی رو تغییر بدیم مجبوریم لایه پایین رو هم تغییر بدیم و عملا لایه بندی دیگه مفهوم خودش رو از دست میده.

3. چه جوری لایه ها رو بسازیم؟

من برای مثال از روی برنامه می گم که هم قدم قدم توی کدها پیش بریم و هم برای شما راحتتر باشه. پس می تونین یه برنامه  جدید باز کنین... 

لایه ی BLL :

1.       توی پنجره ی سولوشن اکسپلورر (اگر پنجره تون باز نبود از منوی View بازش کنین) ، رویBook   Phone (اسم برنامه تون)، راست کلیک می کنین و از گزینه ی ADD یک New Folder می سازین به اسم BLL.

2.       حالا روی این پوشه ی BLL راست کلیک کنین و از گزینه ی ADD برین و یک Class ایجاد کنین.

3.       حالا با کلیک روی این کلاس که پسوند cs داره کلاس باز می شه. اسم  کلاس رو که توی NameSpace ِ   Phone_Book .BLL قرار داره (به خاطر این فولدر بندی خود به خود این فضای نام NameSpace   ایجاد میشه) به  public class PhonBookEntryتغییر می دیم.کلاس رو پابلیک تعریف می کنیم چون قراره ازش توی لایه های دیگه مون (کلاسهای دیگه ی برنامه مون) استفاده کنیم.

4.       حالا کدهایی که توی این کلاس هست رو یا بنویسین یا خوب نگاه کنین. می بینین که اینجا متغییرها و در واقع ستون های جدول پایگاه داده مون رو که از طریق اونها اطلاعات رو دریافت و ثبت می کنیم تعریف شدن. همونطور که می بینین یه کمی تعریفش فرق داره. اینجا از Get و Set استفاده شده که بهشون می گیم پراپرتی . در واقع استفاده از پراپرتی ها برای تعریف خصوصیت های اشیامونه اما اینجا که بدون هیچ شرطی ازشون استفاده شده در واقع برای بالا بردن امنیت متغییرهاست چون همونطور که می بینین متغییرها پابلیک تعریف شدن تا توی کلاسهای دیگه استفاده بشن پس باید امنیت رو ببریم بالا.

توجه: در پروژه های واقعی لایه ها هر کدوم یک یا چند پروژه جداگانه هستند که به صورت فایلهای DLL کامپایل میشن، اما توی این پروژه آموزشی همه رو توی یک پروژه میذاریم.

لایه ی DAL :

1.        مجددا روی phonebook راست کلیک کنین و پوشه ی DALرو ایجاد کنین و بعد توی این پوشه یه کلاس ایجاد کنین به نام public class PhoneBookDAL ، تا اینجاش که شبیه BLL بود. (اینم خود به خود میره توی فضای نام Phone_Book .DAL)

2.       خوب اینجا حالا باید یه کار خیلی مهم انجام بدیم و اون اضافه کردنه Using هایی که برای استفاده از یه سری کلاسهای تعریف شده توی ویژوال استودیو  و اجتناب از تکرار هر بار آدرس دقیقشون، باید اضافه کنیم . بی زحمت اضافه کنین:

using System.Data;

using System.Data.SqlClient;

using Phone_Book.BLL;

که دو تای اولی برای استفاده از کتابخانه ی توابع مربوط به پایگاه داده ی اس کیو ال هست و سومی هم برای استفاده از کلاس BLL توی این کلاس DAL.

3.       همونطور که قرار شد، توی این کلاس باید متدهایی که لازم داریم رو تعریف کنیم و یکسری تنطیمات مربوط به اتصال به پایگاه داده مون.

قبل از تعریف متدهامون توی کلاس، ConnectionString رو تنظیم می کنیم. همونطور که توی پست قبل گفتم.

سوال : حالا این سوال پیش می آد که اصلا این کانکشن استرینگ چی هست و چرا اصلا استاتیک (Static)تعریف شده؟(اینکه چرا پابلیک تعریف شده که معلومه دیگه ؟! چون قراره توی متدهای این کلاس که خودشون توی کلاسهای دیگه استفاده می شن، به کار گرفته بشه.)

جواب: برای جواب به این سوال می خوام چند خط جلوتر به SqlConnection دقت کنین. کانکشن استرینگ در واقع یه سری تنظیماته مثل اسم پایگاه داده و اسم سرور که اس کیو ال کانکشن برای دسترسی به داده های پایگاه داده به این تنظیمات و در واقع به این آدرس دهی احتیاج داره برای اینکه بفهمه باید به کجا و از چه طریقی وصل بشه.

SqlConnection con = new SqlConnection(PhoneBookDAL.ConnectionString);

حالا به ورودیه اس کیو ال کانکشن دقت کنین! خوب می بینین که کانکشن استرینگ چسبیده به خود ِکلاس. این به خاطر اینه که استاتیک تعریفش کردیم و این یعنی یه دونه کانکشن استرینگ داریم که فقط به خود کلاس می چسبه و نه به آبجکت (شی،اینتس(Instance)، وهله) های  Newشده از کلاس.

** البته توی متد Insert می بینین که می شه یه جور دیگه هم  کانکشن استرینگ رو به اس کیو ال کانکشن داد که البته عملا هیچ فرقی ندارن.

SqlConnection con = new SqlConnection();

con.ConnectionString = PhoneBookDAL.ConnectionString;

4.       ... متدهای کلاس ِ   DAL  ، بمونه واسه پست بعدی...

// تا اینجا رو اگه سوالی دارین بپرسین لطفا... ممنونم. موفق باشین.

 

نظرات

1388/09/28 12:09:15 ق.ظ #

آقات این چهار پست از نظر من طلا هستن رو سایت مشکل دارم میشه این چهار پست رو در قالب یک فایل برام میل کنید همین چهار پست ساخت دفتر چه تلفن رو مرسی

فرزان

1388/09/28 10:49:49 ق.ظ #

سلام
من نياز شديدي به اين سورس براي مطالعه دارم ولي خود سورس قابل دانلود نيست بايد چكاركنم؟

ماني

1388/10/15 06:44:14 ب.ظ #

سلام . من به اين 4 بخش نيازه شديدي دارم .. لطفا اينارو واسم بفرس رو اي ميلم .. ممنون ازت

mohamad

1388/10/24 03:38:55 ب.ظ #

سلام تبسم عزيز ، توضيحات تو بهترين جزوه اي بود كه طي اين مدت باهاش مواجه شدم سوالاتي هم دارم كه نياز به جواب هاي واضح تو داره بايد چه كار كنم؟

ماني

1390/01/19 05:23:18 ب.ظ #

سلام من سورس برنامه تون رو دانلود کردم ولی زمان اجرا این خطا رو میگیره لطفا راهنمایی کنید.

Font 'Tahoma' does not support style 'Regular

رضا

1390/03/09 01:58:46 ب.ظ #

salam
baraye man roye con.open error mideeeeeeeeeeee!!!!!

salam

1390/07/18 08:07:57 ب.ظ #

سلام تبسم جان
از توضیحات کاملت ممنون
متاسفانه نتونستم سورس دفترچه تلفن رو دانلود کنم.
لطفا لینکش رو تصحیح کن. اگه برام میل هم کنی بینهایت ممنون
انشاالله شاد و موفق باشی

زینب

امکان ارسال نظر برای این موضوع وجود ندارد

استفاده از مطالب این وبلاگ با ذکر منبع مجاز است، لطفا!!

ایده هات مثل یه پَر که آرووم فرود می آد...

می تونی مفهوم و زیبایی تمام زندگی رو ، دنیا رو جمع کنی توی فقط یه نقطه که در بی نهایت غرقه... محیطِ مجتمع ِ "ویژوال استادیو دات نت" ، یه دنیاست مثل همین دنیا، لایه لایه، صفحه صفحه، دنیا دنیا...می شه توش سفر کرد و زندگی ساخت...دنیایی که قدرتت اونو ساخته، می سازه...مثل ِ یک محیط بازی، جایی برای یادگرفتن و تمرین زندگیه... مثل تمام موقعیت ها ولحظه های زندگی...

---------------------------

tabasom.world@gmail.com 

توجه:

بخش نظرات پس از 3 روز از ارسال پست بسته خواهد شد. برای ارسال سوال یا نظرات از بخش تماس سایت اقدام نمایید. در صورت نیاز از طریق ایمیل پاسخ داده خواهد شد.

پست های قبلی