معماری سه لایه چیست؟
در معماری سه لایه تمام برنامه به چندین بخش تقسیم میشود. این بخشها میتوانند فیزیکی یا منطقی باشند. هر بخش کار خاصی را انجام میدهد مثلاً نمایش اینترفیس کاربر یا دسترسی به دادهها. برنامه میتواند به هر تعداد لایه داشته باشد ولی به هر حال بیشتر برنامهها سه لایه مجزا دارند که عبارتند از :
- Presentation Layer
- Business Logic Layer
- Data Access Layer
همان طور که احتمالاً حدس زدهاید، لایه Presentation چیزی نیست به جز بخشی از نرم افزار که با کاربر برنامه شما ارتباط برقرار میکند (اینترفیس برنامه شماست) نمایش دادهها به کاربر نهایی و اجازه به آنان برای ارتباط داشتن با دادهها، اصلیترین وظیفه این لایه است. در بیشتر موارد دادههایی که توسط کاربر وارد میشوند نیاز به اعتبارسنجی یا پردازش اضافی دارند. این مسوولیت لایه Business Logic است. در نهایت دادههای برنامه شما نیاز به ذخیره و بازیابی از طریق یک انبار داده دارند (مثلاً سیستم مدیریت دیتابیسهای رابطهای یا RDBMS و یا XML , .. ) این وظیفه توسط لایه دسترسی به داده انجام میشود. به طور خلاصه، فرآیند مورد نظر ما این گونه کار میکند:
- کاربر برای دادههای برنامه درخواستی ارسال میکند.
- لایه Data Access دادههای مورد نظر را بازیابی میکند و از طریق لایه Business Logic آنها را به لایه نمایش میفرستد. بعضی مواقع لایه دسترسی به دادهها، این دادهها را مستقیماً به لایه نمایش ارسال میکند.
- لایه نمایش اطلاعاتی که باید نمایش داده شوند را از طریق لایه Business Logic دریافت میکند.
- کاربر دادهها را تغییر میدهد و عمل مناسب در مورد آنها را اجرا میکند (مثل اضافه یا به روز کردن دادهها )
- لایه Business Logic صحت دادههای وارد شده توسط کاربر را بررسی میکند (دادهها را اعتبار سنجی میکند)
- اگر دادهها معتبر باشند آنها را برای به روز رسانی در بانک اطلاعاتی به دست لایه دسترسی به داده میسپارد.
مزیتهای برنامههای چند لایه
- برنامهها به چند بخش منطقی جدا از هم تقسیم میشوند و اتصال میان UI ( رابط کاربری)، پردازشها و بانک اطلاعاتی کم میشود.
- تغییر در بانک اطلاعاتی یا روالهای دسترسی به دادهها تاثیری در لایه نمایش یا برنامه کلاینت نخواهد گذاشت.
- برنامه کلاینت با عبارات SQL آمیخته نخواهد شد.
- نام جداول و ستونها به طور موثری از برنامه کلاینت حذف میشوند.
- برنامه کلاینت نمیفهمد که دادهها از کجا آمدهاند (چیزی که به آن location transparency گفته میشود )
- تغییر یا گسترش برنامه بسیار سادهتر خواهد شد، بدون نیاز به تغییر یا کامپایل مجدد برنامه کلاینت.
نکته منفی در معماری سه لایه این است که شما باید تعداد زیادی بخشها و کلاسهای از هم جدا در نرم افزار بسازید. اما به هر حال مزایای این روش بیشتر و برتر از معایب آن است.
انتخابهای لایه Presentation
دو انتخاب اصلی برای ساخت یک لایه نمایش در دات نت وجود دارد. آنها فرمهای ویندوزی یا فرمهای وبی ASP.NET هستند. با استفاده از ویندوز فرمها شما میتوانید برنامههای دسکتاپ فرم محور ( form base ) معمول را بسازید. برنامههای ویندوز فرمی میتوانند المانهای رابط کاربری بسیار غنی به کاربر پیشنهاد کنند. آنها کم و بیش شبیه به فرمهای ویژوال بیسیک هستند. جذابترین گزینه برای توسعه لایه نمایش استفاده از وب فرمهای ASP.NET است. کنترلهایی مثل دیتاگرید، دیتالیست و تقویم ( Calendar ) یک رابط کاربری قدرتمند را با مقدار کمی کد فراهم میکنند. انتخابهایی که در بالا برای ساخت یک لایه نمایش بررسی کردیم میتوانند توسط زبانهای مختلفی مثل سی شارپ یا ویژوال بیسیک دات نت پیاده سازی شوند.
انتخابهای لایه Business Logic
لایه Business logic از چندین بخش که کارهایی نظیر اعتبار سنجی کار، گردش کار یا کارهای مشابه را انجام میدهند تشکیل شده است. کامپوننت های دات نت این لایه را شکل میدهند.
انتخابهای لایه Data Access
این لایه با دستکاری دادهها مثل اضافه، حذف و به روز رسانی آنها سر و کار دارد. دادههایی که به آنها اشاره کردیم میتوانند در RDBMS یا XML قرار داشته باشند. شما باید لایه دسترسی به داده را چنان طراحی کنید که دیگر لایهها نیازی به دانستن وضعیت انبار دادهها نداشته باشند. ADO.NET فناوری دسترسی به داده تحت دات نت است. اگر چه ADO.NET از طریق کلاسهای DataReader اجازه دسترسی به دادههای در هنگام اتصال را میدهد ولی بیشترین تمرکز روی دسترسی به دادهها در زمان متصل نبودن است. دیتاست نقش کلیدی را در این مورد بازی میکند. در بعضی موارد شما میتوانید ADO را هم برای دسترسی به دادهها استفاده کنید ولی استفاده از آن باید دلیل معتبری داشته باشد. از ADO استفاده نکنید فقط به خاطر اینکه RecordSet ها را دوست دارید. این جا هم کامپوننت های دات نت لایه را تشکیل میدهند. همچنین وب سرویسها هم میتوانند لایه دسترسی به داده را شکل دهند. این مخصوصاً زمانی درست است که دیتابیس شما فراهم کننده ( provider ) داده ندارد. در این گونه موارد شما میتوانید مقداری کد برای اتصال به دادهها و پر کردن دیتاست ها و بازگرداندن نتایج درون دیتاست به درخواست کننده داده بنویسید. علاوه بر ADO.NET شما میتوانید از امکانات سیستم مدیریت دیتابیس خود مثل توابع و یا روالهای ذخیره شده ( Stored Procedures ) استفاده کنید. در این سری آموزشی قصد داریم در قالب یک پروژه عملی این معماری را به شما آموزش دهیم.
برای لایه presentation من خونده بودم 3 انتخاب هست وبی وموبایلی و ویندوز فرمی
کدومش درسته؟2یا3؟
ببخشید اینجا گفتین برنامه لوکیشن ترنس پرنسی داره
مگه در برنامه هایی که ساده نوشته میشه این اتفاق نمیوفته؟
و سوال دوم اینکه لطفا توضیح بدین چجوری تغییر در بانک اطلاعاتی تاثیری در لایه نمایش نخواهد داشت…مگه در برنامه نویسی ساده این اتفاق نمیوفته؟اگه ممکنه با مثال بگین خیلی ممنونم از سایت خوبتون
لینک آموزش معماری سه لایه به صورت ویدئویی رو برای ایمیلتون فرستادم، اونو ببینید به جواب سوالاتتون می رسین. پروژه محور هم هست
مهندس همین پروژه را با Entity Framework هم می گذارید?
فعلا نه
با انتشار فیلم رایگان پروژه عملی، برنامه سه لایه به زبان c# واقعا گل کاشتی مهندس، خدا قوت.
ببخشید میشه یک مثال هم بزارید ممنون میشم
سلام، ادامه مطالب یا پست های بعدی رو بخونید، مثال زدم
ممنون خیلی خوب بود
خواهش می کنم، لطف دارین
سلام
در برنامه نویسی سه لایه برای ویندوز همون طور که می دونیم لایه نمایش هیچ شناختی ازلایه اول یعنی DAL نداره
این رو در نظر بگیرید :
1. DAL
2. BLL
3.PAL – یا PL و یا UI
حالا متدی داریم که مقداری رو از یک جدول بر می گردونه ، این متد با بانک اطلاعاتی در ارتباط هست بنابراین در DAL به این صورت پیاده میشه :
public Table1 find (int code) { … }
فرض می کنیم با دستورات LINQ مقداری رو بر اساس کد برگردوندیم در BLL از این متد استفاده و رفرنس مربوط به لایه DAL رو هم Add می کنیم
public Table1 find (int code) { DAL obj =new DAL(); return obj.find(code); }
حالا از این موارد که می تونیم در این قسمت try catch بذاریم و … صرف نظر می کنیم تا به سوالم برسیم
سوال :
در حال حاضر من لایه های
DAL
و BLL
رو با تابع مورد نظرم درست کردم و خطایی هم ندارم ، اما اگر بخوام در Ui از متد ایجاد شده در لایه BLL (با نام find) استفاده کنم خطایی رو به این صورت میبینم:
که اشاره شده این متد رفرنسی از DAL داره ، بایستی در این لایه (یعنی Ui) لایه DAL رو هم اضافه کنی.
من اگر اضافه کنم برنامه جواب می ده.
اما اینطوری داریم اصل سه لایه رو نقض می کنیم چون داریم میگیم لایه UI هیچ شناختی از لایه DAL نداره ، وقتی اینکار رو می کنیم عملاً شناخت کامل داره
و حتی می تونه بدون دخالت BLL هم متدها رو از DAL فراخوانی کنه؟
چه طوری می تونم متدی رو
در DAL ایجاد کنم ( خروجی یک جدول )
در BLL استفاده کنم و منطق خاص خودم رو پیاده کنم
و در UI فقط از BLL استفاده کنم
؟
سلام دوست عزیز، ممنون میشم سوالتونو توی بخش پرسش و پاسخ مطرح بفرمایید
واقعا عالی بود. خیلی وقت بود دنبال این مطلب بودم. ادامه بدید حتما
سلام سایت شما واقعا عالی هست.
از شما بسیار ممنونم.
اجرکم عند الله.
تشکر فراوان
خواهش می کنم دوست خوبم ، لطفا سایت مارو به دوستانتون معرفی کنید .
سپساگزارم