PDA

View Full Version : مرجع آموزش برنامه نویسی سه لایه



maxpayn2
سه شنبه 04 دی 1386, 12:32 عصر
سلام
دوستان اگه مرجعی برای آموزش برنامه نویسی سه لایه سراغ دارن بنویسن ، اگه فارسی باشه نور علی نور میشه

shahab_ksh
سه شنبه 04 دی 1386, 13:15 عصر
در معماری چند لایه تمام برنامه به چندین بخش تقسیم می‌شود. این بخش‌ها می‌توانند فیزیکی یا منطقی باشند. هر بخش کار خاصی را انجام می‌دهد مثلا نمایش interface کاربر یا دسترسی به داد‌ه‌ها. برنامه می‌تواند به هر تعداد لایه داشته باشد ولی به هر حال بیش‌تر برنامه‌ها سه لایه‌ی مجزا دارند که عبارت‌اند از:




Presentation Layer
Business Logic Layer
Data Access Layer



http://www.roshd.ir/roshd/Portals/0/0and1/olympiad/Computer/BreakTime/a11111111.jpg

همان‌طور که احتمالا حدس زده‌اید، لایه‌ی Presentation چیزی نیست به جز بخشی از نرم‌افزار که با کاربر برنامه‌ی شما ارتباط برقرار می‌کند (interface برنامه‌ی شماست). نمایش داده‌ها به کاربر نهایی و اجازه به آنان برای ارتباط داشتن با داده‌ها، اصلی‌ترین وظیفه‌ی این لایه است.

در بیش‌تر موارد، داده‌هایی که توسط کاربر وارد می‌شوند نیاز به اعتبارسنجی یا پردازش اضافی دارند. این مسؤولیت لایه‌ی Business Logic است.

در نهایت داده‌های برنامه‌ی شما نیاز به ذخیره و بازیابی از طریق یک انبار داده دارند (مثلا سیستم مدیریت DataBaseهای رابطه‌ای یا RDBMS و یا XML و ...) این وظیفه توسط لایه‌ی دسترسی به داده انجام می‌شود.

به‌طور خلاصه، فرایند مورد نظر ما این‌گونه کار می‌کند:

- کاربر برای داده‌های برنامه، درخواستی ارسال می‌کند.

- لایه‌ی Data Access داده‌های مورد نظر را بازیابی می‌کند و از طریق لایه‌ی Business Logic آن‌ها را به لایه‌ی نمایش می‌فرستد. بعضی مواقع لایه‌ی دسترسی به داده‌ها، این داده‌ها را مستقیما به لایه‌ی نمایش ارسال می‌کند.

- لایه‌ی نمایش اطلاعاتی که باید نمایش داده شوند را از طریق لایه‌ی Business Logic دریافت می‌کند.

- کاربر داده‌ها را تغییر می‌دهد و عمل مناسب در مورد آن‌ها را اجرا می‌کند (مثل اضافه یا به‌روز کردن داده‌ها)

- لایه‌ی Business Logic صحت داده‌های وارد شده توسط کاربر را بررسی می‌کند (داده‌ها را اعتبارسنجی می‌کند)

- اگر داده‌ها معتبر باشند آن‌ها را برای به‌روز رسانی در بانک اطلاعاتی به‌دست لایه‌ی دسترسی به داده می‌سپارد.



مزیت‌های برنامه‌های چند لایه

- برنامه‌ها به چند بخش منطقی جدا از هم تقسیم می‌شوند و اتصال میان UI (رابط کاربری)، پردازش‌ها و بانک اطلاعاتی کم می‌شود.

- تغییر در بانک اطلاعاتی یا روال‌های دسترسی به داده‌ها، تاثیری در لایه‌ی نمایش یا برنامه‌ی کلاینت نخواهد گذاشت.

- برنامه‌ی کلاینت با عبارات SQL آمیخته نخواهد شد.

- نام جداول و ستون‌ها به‌طور مؤثری از برنامه‌ی Client حذف می‌شوند.

- برنامه‌ی Client نمی‌فهمد که داده‌ها از کجا آمده‌اند (چیزی که به آن Location Transparency گفته می‌شود)

- تغییر یا گسترش برنامه بسیار ساده‌تر خواهد شد، بدون نیاز به تغییر یا کامپایل مجدد برنامه‌ی Client.

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



http://www.roshd.ir/roshd/Portals/0/0and1/olympiad/Computer/BreakTime/aaaaaaa2.jpg


انتخاب‌های لایه‌ی Presentation

دو انتخاب اصلی برای ساخت یک لایه‌ی نمایش در دات نت وجود دارد. آن‌ها فرم‌های ویندوزی یا فرم‌های وبی ASP.NET هستند.

با استفاده از ویندوز فرم‌ها شما می‌توانید برنامه‌های دسکتاپ فرم محور (Form Base) معمول را بسازید. برنامه‌های ویندوز فرمی می‌توانند المان‌های رابط کاربری بسیار غنی به‌کاربر پیشنهاد کنند. آن‌ها کم و بیش شبیه به فرم‌های ویژوال بیسیک هستند.

جذاب‌ترین گزینه برای توسعه‌ی لایه‌ی نمایش استفاده از وب فرم‌های ASP.NET است. کنترل‌هایی مثل: دیتاگرید، دیتالیست و تقویم (Calendar) یک رابط کاربری قدرتمند را با مقدار کمی کد فراهم می‌کنند.

انتخاب‌هایی که در بالا برای ساخت یک لایه‌ی نمایش بررسی کردیم می‌توانند توسط زبان‌های مختلفی مثل C#Visual Studio.Net پیاده‌سازی شوند.


انتخاب‌های لایه‌ی Business Logic

لایه‌ی Business Logic از چندین بخش که کارهایی نظیر اعتبار سنجی کار، گردش کار یا کارهای مشابه را انجام می‌دهند تشکیل شده است.

Componentهای .Net این لایه را شکل می‌دهند. شما می‌توانید با Interop از Componentهای COM استفاده کنید ولی این کار کارایی را پایین خواهد آورد.

وب‌سرویس‌های ASP.NET هم می‌توانند به‌عنوان یک Business Logic عمل کنند. اما به هر حال آن‌ها را نمی‌توان در همه‌ی شرایط به‌عنوان جایگزین Componentها به‌کار برد. وب‌سرویس‌ها تنها زمانی قابل استفاده خواهند بود که اعتبارسنجی در جایی بیرون از شبکه‌ی شما اتفاق افتاده باشد.

Componentهایی که توسعه می‌دهید به ماندن روی ماشین‌های مشابه نیازی ندارند. با استفاده از دات NET Remoting می‌توانید آن‌ها را روی چندین ماشین توزیع کنید.


انتخاب‌های لایه‌ی Data Access

این لایه با دستکاری داده‌ها مثل اضافه، حذف و به‌روز رسانی آن‌ها سر و کار دارد. داده‌هایی که به آن‌ها اشاره کردیم می‌توانند در RDBMS یا XML قرار داشته باشند. شما باید لایه‌ی دسترسی به داده را چنان طراحی کنید که دیگر لایه‌ها نیازی به دانستن وضعیت انبار داده‌ها نداشته باشند.

ADO.NET فناوری دسترسی به داده‌ی تحت دات .Net است. اگر چه ADO.NET از طریق کلاس‌های DataReader اجازه‌ی دسترسی به داده‌های در هنگام اتصال را می‌دهد ولی بیش‌ترین تمرکز روی دسترسی به داده‌ها در زمان متصل نبودن است. DataSet نقش کلیدی را در این مورد بازی می‌کند. در بعضی موارد می‌توانید ADO را هم برای دسترسی به داده‌ها استفاده کنید ولی استفاده از آن باید دلیل معتبری داشته باشد. از ADO استفاده نکنید فقط به خاطر این‌که RecordSetها را دوست دارید!

این‌جا هم Componentهای .Net لایه را تشکیل می‌دهند. همان‌طور که قبلا گفته شد می‌توانید از Componentهای کلاسیک COM هم استفاده کنید.

هم‌چنین وب‌سرویس‌ها هم می‌توانند لایه‌ی دسترسی به داده را شکل دهند. این مخصوصا زمانی درست است که DataBase شما فراهم‌کننده‌ی (Provider) داده ندارد. در این‌گونه موارد شما می‌توانید مقداری کد برای اتصال به داده‌ها و پر کردن DataBaseها و بازگرداندن نتایج درون DataSet به درخواست‌کننده‌ی داده بنویسید.

علاوه بر ADO.NET شما می‌توانید از امکانات سیستم مدیریت DataBase خود مثل توابع و یا روال‌های ذخیره شده (Stored Procedures) استفاده کنید.




http://www.roshd.ir/roshd/Portals/0/0and1/olympiad/Computer/BreakTime/3ter.jpg

ارسال داده از یک لایه به لایه‌ی دیگر

در تمام موارد به ارسال اطلاعات از یک لایه به لایه‌ی دیگر نیاز است؛ به‌طور معمول برنامه‌نویسان از رشته‌ها، آرایه‌ها، RecordSetهای غیرمتصل برای رسیدن به این هدف استفاده می‌کنند. در .Net ، DataSetها یک راه فوق‌العاده برای انتقال اطلاعات میان لایه‌ها فراهم می‌کنند. شما حتی می‌توانید با برنامه‌نویسی یک DataSet بسازید و آن را با داده‌های خودتان پر کنید. اگر اشیا را خیلی دوست دارید می‌توانید از Typed DataSets استفاده کنید که در واقع کلاسی مشتق شده از کلاس DataSet است که جداول و سطرها را به شکل یک شی معرفی می‌کند.




http://www.roshd.ir/roshd/Portals/0/0and1/olympiad/Computer/BreakTime/a3a3a3.jpg

منبع :http://www.roshd.ir/ (http://www.roshd.ir/)

mahdi_farhani
سه شنبه 04 دی 1386, 15:15 عصر
من یه سوال در این مورد دارم ( شاید از نظر شما بی ربط باشه ) بارها هم پرسیدم ولی به نتیجه نرسیدم ، این فایل Dataset.xsd آیا ربطی به برنامه نویسی لایه ای داره یا نه؟ یعنی میشه به عنوان لایه DAL بش نگاه کرد یا نه .

mahdi_negahi
سه شنبه 04 دی 1386, 15:20 عصر
برای DAL چندین روش وجود دارد
1-روش دستی
2-روش DataSet
3-روش Nhibernet
4-.....

mahdi_farhani
سه شنبه 04 دی 1386, 15:32 عصر
کدوم روش توضیه میشه ، از نظر حجم پروژه میگم .
و همچنین احتمال تغییرات در دیتابیس اگر باشه کدوم روش راحتتر تغییر میکنه
روش Nhibernet چی هست تا حالا نشنیدم ، میشه یه توضیحی بدید

mahdi_negahi
سه شنبه 04 دی 1386, 16:00 عصر
من روش Nhibernet ,و دستی خودم توضیه میکنم
ولی روش از همه سختره
DataSet راحتر ، سرعت بالا ولی کلا برای دیتا بیس های پر حجم توصیه نمی شود

mr_moghimkhani
سه شنبه 04 دی 1386, 16:48 عصر
لطفاً در مورد روش Nhibernet توضیح و یا مثال بزنید.

mahdi_negahi
سه شنبه 04 دی 1386, 19:13 عصر
http://hibernate.org/

teshnehab
دوشنبه 27 آبان 1387, 01:02 صبح
سلام
دوستان اگه مرجعی برای آموزش برنامه نویسی سه لایه سراغ دارن بنویسن ، اگه فارسی باشه نور علی نور میشه

در اين تاپيك در خواست معرفي منبع شده ولي اصلا به درخواست جواب داده نشده است.
ميشه يكي كمك كنه؟؟

Alireza_Salehi
دوشنبه 27 آبان 1387, 12:05 عصر
برای DAL چندین روش وجود دارد
1-روش دستی
2-روش DataSet
3-روش Nhibernet
4-.....


اینها تا قبل از .NET 3.5 بود، LINQ (http://msdn.microsoft.com/en-us/netframework/aa904594.aspx) و dbml رو هم امتحان کنید.

s.iran
دوشنبه 27 آبان 1387, 23:51 عصر
سلام دوستان،
اگه ممکنه توضیح دهید که چه جوری از این معماری سه لایه استفاده کنم؟ توضیحاتتون کامل بود ولی چه جوری استفاده میشه؟

hassanf
سه شنبه 28 آبان 1387, 01:55 صبح
روش های زیادی برای پیاده سازی معماری سه لایه وجود دارد.به طور خلاصه می توان به موارد زیر اشاره کرد .

معماری چند لایه از دو دیدگاه مورد بررسی قرار میگیرد : منطقی وفیزیکی
در معماری منطقی می توان 3 لایه در نظر گرفت :
Data layer , Business logic layer , presentation layer

وظیفه لایه Data ذخیره سازی و پردازش و حفاظت از اطلاعات است. که می توان آن را با یک DBMS پیاده سازی کرد.

وظیفه لایه busness logic مشخص کردن قوانین حاکم بر سیستم است. از زبان های برنامه سازی و Stored procedure میتوانید این لایه را پیاده سازی کنید.

وظیفه لایه Presentation عرضه امکانات سیستم به کاربران است .از زبان های برنامه سازی برای ایجاد این لایه تحت عنوان رابط کاربر استفاده می شود.

اما از دیدگاه فیزیکی دو سطح سرور و کلاینت در نظر گرفته می شود :لایه data و Business logic در دیدگاه منطقی در سطح سرور ولایه Presentation در سطح کلاینت قرار می گیرد.

teshnehab
سه شنبه 28 آبان 1387, 19:16 عصر
سلام
دوست گرامي جناب hassanf
از توضيحات مختصر و مفيدتان مممنون هستم.اگر لطف كنيد و نحوه پياده سازي معماري 3 لايه را در asp.net توضيح دهيد، حداقل با يك مثال كوچك خيلي عالي ميشه.
با تشكر

hassanf
سه شنبه 28 آبان 1387, 19:38 عصر
سلام عزیزم

اگه وقت کردم یه پروژه 3لایه تو همین تاپیک برای دانلود می زارم.شما هم Search کن از این پروژه ها زیاده.

فقط نکته ای که مونده بود اینه که برای انتقال Data بین لایه ها از DataSet , Object , xml استفاده می شود. که کار با DataSet از همه ساده تره.

s.iran
سه شنبه 28 آبان 1387, 23:16 عصر
سلام
اگه لطف کنید و یک پروژه بذلرید عالی میشه.

milade
سه شنبه 28 آبان 1387, 23:22 عصر
بچه ها برید توی مقالات .net همین سایت اونجا درباره چند لایه صحبت شده
من حوصله توضیح ندارم ولی وقتی بفهمید چیه میبینید که خودتون چند لایه نویس بودید و خبر نداشتید

teshnehab
چهارشنبه 29 آبان 1387, 00:35 صبح
بچه ها برید توی مقالات .net همین سایت اونجا درباره چند لایه صحبت شده
من حوصله توضیح ندارم ولی وقتی بفهمید چیه میبینید که خودتون چند لایه نویس بودید و خبر نداشتید

سلام
اگر لطف كنيد آدرس بديد ممنون ميشيم.

s.iran
چهارشنبه 29 آبان 1387, 01:09 صبح
بچه ها برید توی مقالات .net همین سایت اونجا درباره چند لایه صحبت شده
من حوصله توضیح ندارم ولی وقتی بفهمید چیه میبینید که خودتون چند لایه نویس بودید و خبر نداشتید


سلام
واقعا؟؟ یعنی الن هم داریم 3 لایه می نویسیم. البته من هنوز یه پروژه کامل ننوشتم ولی خیلی امیدوار شدم:لبخندساده:

milade
چهارشنبه 29 آبان 1387, 07:21 صبح
سلام

اگر لطف كنيد آدرس بديد ممنون ميشيم.
http://www.barnamenevis.org/forum/showthread.php?t=78333

واقعا؟؟ یعنی الن هم داریم 3 لایه می نویسیم. البته من هنوز یه پروژه کامل ننوشتم ولی خیلی امیدوار شدم:لبخندساده:
ممکنه!
دوستان می خوام براتون توضیح بدن(باید برم مدرسه)
ولی اگه دیدم کسی چیزی نگفت و با ادرس مشکل حل نشد شاید یه مثال دادم(شاید)
موفق باشید

milade
چهارشنبه 29 آبان 1387, 07:22 صبح
راستی اینم هست که مفصلتره
http://www.barnamenevis.org/forum/showthread.php?t=50207

hassanf
چهارشنبه 29 آبان 1387, 07:34 صبح
ببینید دوستان
شما بستگی داره چه دیدی نسبت به سه لایه داشته باشیم.
و گرنه وقتی شما از Sqldata Source و Dataset و Database و ... استفاده می کنی هم اینا می تونن لایه های شما باشن. ولی در کل هر چی سیستمی که روش کار می کنی بزرگتر با شه شما باید کامپوننت های .Net رو بزاری کنار و خودت لایه ها رو بنویسی .