PDA

View Full Version : برنامه نویسی لایه ایی



sepehr.net
پنج شنبه 07 آذر 1387, 09:34 صبح
سلام
من این تاپیک رو ایجاد کردم تا هر کسی که اطلاعاتی در مورد برنامه نویسی لایه ایی داره در اختیار دیگران هم قرار بده تا افرادی مثل من که چیز زیادی در این مورد نمیدونند از این مطالب استفاده کنند.
با تشکر

sepehr.net
پنج شنبه 07 آذر 1387, 09:36 صبح
اگر دوستان لطف کنند در ابتدا تعریف دقیق و کاملی از برنامه نویسی لایه ایی رو برای ما داشته باشند خیلی ممنون میشیم

اوبالیت به بو
پنج شنبه 07 آذر 1387, 10:46 صبح
Soloution برنامه به لايه هاي مختلفي قسمت بندي ميشه. حالا چون من به MVC بيشتر آشنايي دارم اون رو مثال مي زنم.
بدون هيچ تعريف و مقدمه اي بگم كه شما برنامت رو به 3 لايه ي:

User Interface Layer
Bussines Logic Layer
Data Access Layer
تقسيم بندي مي كنيد. هر لايه وظيفه خاص خودش رو داره و در هر لايه فقط كار مربوط به اون لايه انجام ميشه. همچنين ترتيب خيلي مهم هستش يعني لايه ي User Interface نبايد با لايه Data Access ارتباط مستقيم داشته باشه. فرض كنيد مي خوايم تويه DataBase يه ركوردي رو ثبت كنيم. به ترتيب اين اتفاقات ميوفته:

از لايه ي User Interface اطلاعاتي صادر ميشه. اين اطلاعات فيلدهاي پر شده جدول هستند كه بايد در جدول ثبت بشن.
اين اطلاعات پر شده وارد لايه ي Bussines Logic و در كلاس مربوط به خودشون قرار ميگيرن.
لايه ي Bussines Logic دستور SQL يا هر دستوري كه باعث ثبت اطلاعات در DataBase ميشه رو صادر مي كنه و بوسيله دستور اطلاعات فرستاده شده از User Interface رو مياد ذخيره كنه.
براي ذخيره سازي مياد به لايه Data Access و دستور رو اجرا مي كنه و اطلاعات در پايگاه داده ثبت ميشه.
حالا لايه Data Access يه خروجي بايد به Bussines Logic بده كه آيا اطلاعات با موفقيت ثبت شد يا خير.
لايه Bussines Logic اين خروجي رو منتل مي كنه به User Interface برنامه و در اونجا به كاربر اعلام ميشه كه چه اتفاقي افتاده.
اگه دقت كنيد تمامي مراحل به صورت ترتيبي و با يه نظم و قانون خاصي انجام ميشن.
از چپ به راست:

User Interface - Bussines Logic - Data Access - Bussiness Logic - User Interface

MVC يا Model View Control باعث ميشه كه هر گونه تغييري در پروژه به سادگي انجام بشه و مثلاً اگه يه روزي برنامه افتاد دست يه برنامه نويس و يا برنامه قصد داشت كه به صورت Web Application در بياد به راحتي اين كار انجام بشه.
تويه مثال بالا Model قسمت Data Access ما هستش. View همون User Interface و Control لايه Bussines Logic برنامه هستش.

sepehr.net
پنج شنبه 07 آذر 1387, 20:51 عصر
از جوابی که دادید ممنونم
اگه لطف کنین و یک نمونه کد ساده که برنامه نویسی لایه ایی در ان به کار رفته شده باشه رو برای ما روی سایت قرار بدین خیلی عالی میشه و توضیحات شما رو در این زمینه تکمیل میکنه

اوبالیت به بو
شنبه 09 آذر 1387, 21:55 عصر
يه DataBase با اسم MVC و با جدول MVCtbl كه درونش فيلدهاي:

FName از نوع NVarChar
Tel از نوع Int
Address از نوع NVarChar
وجود داشته باشه، بسازيد.
خاصيت ConnectionString درون لايه DAL رو با توجه به كامپيوترتون تنظيم كنيد.

تا جايي كه تونستم كد رو ساده نوشتم.:گیج:

aminkk
دوشنبه 11 آذر 1387, 16:56 عصر
شازده من هیچی از کدت نفهمیدم.

sepehr.net
دوشنبه 11 آذر 1387, 20:42 عصر
اقا دست درد نکنه خیلی خوب بود
یک سوال داشتم :
چه روش هایی برای برنامه نویسی لایه ایی وجود داره؟ و اگر میشه چند مرجع کامل برای آموزش برنامه نویسی لایه ایی معرفی کنید

اوبالیت به بو
چهارشنبه 13 آذر 1387, 03:22 صبح
شازده من هیچی از کدت نفهمیدم.
جدي نگيريد مهم نيست...

اقا دست درد نکنه خیلی خوب بود
یک سوال داشتم :
چه روش هایی برای برنامه نویسی لایه ایی وجود داره؟ و اگر میشه چند مرجع کامل برای آموزش برنامه نویسی لایه ایی معرفی کنید
برنامه نويسي لايه اي مي تونه 5 لايه 8 لايه و n لايه باشه ولي به ندرت مياد كه از 5 لايه به بالا استفاده بشه. اصلاً شايدم نشه!!!
Expert C# 2005 Business Objects

احمد سامعی
پنج شنبه 08 اسفند 1387, 09:18 صبح
جدي نگيريد مهم نيست...

برنامه نويسي لايه اي مي تونه 5 لايه 8 لايه و n لايه باشه ولي به ندرت مياد كه از 5 لايه به بالا استفاده بشه. اصلاً شايدم نشه!!!
Expert C# 2005 Business Objects

من برنامه شما رو ديدم با VB و من #C كار مي كنم كليات كار رو فهميدم اما به خاطر اين كه ارتباط بين دو كلاس در دو زبان فرق مي كنه نتونستم ازش تو #C استفاده كنم...:ناراحت::افسرده:

مي شه دوستان يك برنامه ساده با #C بزارن...

راستي من برنامه هام را اينجوري مي نويسم ببينيد اين برنامه چند لايه مي شه يا نه ؟ و اشكالش كجاست ؟

اول يك پرژه Windows Forms Application مي سازم تا با كاربر ارتباط برقرار كنه
بعد يك پرژه Class Library اضافه مي كنم كه يك dll. مي شه و از داخل اون به بانكم دسترسي دارم و اينزرت و آپديت... انجام مي دم ( و ممكن اين dll. ها چندتا باشه هر كدوم واسه يك كار با ديتا بيس)
و از داخل برنامه اصلي داده ها به اين dll. ها پاس مي دم يا ازشون اطلاعات رو دريافت مي كنم و براي راهتي كار توابع داخل dll. ها رو هم static مي نويسم

majid325
جمعه 09 اسفند 1387, 02:11 صبح
برنامه شما 2 لایه هست.
هر لایه در واقع یک پروژه میباشد
تعریف کردن توابع به صورت static کار جالبی برای نقل و انتقال داده {صرفا} نیست.

احمد سامعی
جمعه 09 اسفند 1387, 11:52 صبح
برنامه شما 2 لایه هست.
هر لایه در واقع یک پروژه میباشد
تعریف کردن توابع به صورت static کار جالبی برای نقل و انتقال داده {صرفا} نیست.

منون

تعریف توابع به صورت static در واقع براي راحتي كار نيست منظورم اين بود كه هي شيء جديد نسازم و سرباره ايجاد نكنم...

1. آيا راه درست تر همون ايجاد نمونه از كلاس هست يا راه ديگه ؟
2. من هنوزم نفهميدم لايه Bussines Logic چطور ايجاد كنم و اين رفت و برگشت اطلاعات چه سودي داره آيا پرسه اضافي ايجاد نمي كنه ؟
3. آيا برنامه لايه تاثير بهتري براي عدم دي كمپايل كردن و امنيت داره ؟

jafaripur
جمعه 09 اسفند 1387, 13:00 عصر
این یه برنامه کامل در ASP.NET هستش که لایه ای هستش ...

http://barnamenevis.org/forum/showthread.php?t=149733

majid325
شنبه 10 اسفند 1387, 01:42 صبح
تعریف توابع به صورت static در واقع براي راحتي كار نيست منظورم اين بود كه هي شيء جديد نسازم و سرباره ايجاد نكنم...
برای نقل و اتقال بسته به موردش , راهش متغییره...(static کاربرد دیگه ای داره)
شما یه کم راجع به دلیل وجود متغییر های static تحقیق کنی بد نیست.

من هنوزم نفهميدم لايه Bussines Logic چطور ايجاد كنم و اين رفت و برگشت اطلاعات چه سودي داره آيا پرسه اضافي ايجاد نمي كنه ؟
در واقع شما پروسه ها رو از هم جدا میکنید
یه کم تحقیق راجع به مفاهیم چند لایه....
الان شما از لایه 1 درخواست داده رو به لایه 2 میفرستید و لایه2 بعد از اعتبار سنجی(در صورت لزوم) داده ها رو به لایه 1 بر میگردونه, خوب در 3لایه هم همین طور هست (تقریبا) , لایه 1 درخواست داده رو به لایه 2 میفرسته و لایه 2 بعد از اعتبار سنجی در خواست رو به لایه 3 میفرسته و ادامه...
در مورد اعتبار سنجی ها هم که میشه برداشت های مختلفی بسته به نیاز برنامه کرد....

3. آيا برنامه لايه تاثير بهتري براي عدم دي كمپايل كردن و امنيت داره ؟
تا حدود تاثیر داره ولی در کل برای عدم کرک نرم افزار باید در برنامه از الگوریتم ها و ابزارهای مختلفی استفاده کرد.
البته در مورد کرک, اساتید همیشه میگن : فقط میشه کار کرکر رو سخت تر کرد ولی شما جدی نگیر.

babak62
دوشنبه 12 اسفند 1387, 10:26 صبح
معماری چند لایه نرم افزار
ساختنبرنامه های چند لایه ایده جدیدی نیست. از زمان ویژوال بیسیک 4، توسعه دهندگان چنینبرنامه هایی می ساختند. دات نت پشتیبانی زیادی را برای ساخت این گونه برنامه هافراهم می کند. در این مقاله فصد داریم یک مرور بر معماری چند لایه و امکانات دات نتبرای ساخت برنامه های چند لایه داشته باشیم.




برنامه چند لایه چیست؟



درمعماری چند لایه تمام برنامه به چندین بخش تقسیم می شود. این بخش ها می توانندفیزیکی یا منطقی باشند. هر بخش کار خاصی را انجام می دهد مثلا نمایش اینترفیس کاربریا دسترسی به داده ها. برنامه می تواند به هر تعداد لایه داشته باشد ولی به هر حالبیشتر برنامه ها سه لایه مجزا دارند که عبارتند از :
1- Presentation Layer
2- Logic Layer Business
3- Data Access Layer
همانطور که احتمالا حدس زده اید، لایه Presentation چیزی نیست به جز بخشی از نرم افزارکه با کاربر برنامه شما ارتباط برقرار می کند ( اینترفیس برنامه شماست ) نمایش دادهها به کاربر نهایی و اجازه به آنان برای ارتباط داشتن با داده ها، اصلی ترین وظیفهاین لایه است.
دربیشتر موارد داده هایی که توسط کاربر وارد می شوند نیاز به اعتبارسنجی یا پردازشاضافی دارند. این مسوولیت لایه Business Logic است.
درنهایت داده های برنامه شما نیاز به ذخیره و بازیابی از طریق یک انبار داده دارند ( مثلا سیستم مدیریت دیتابیس های رابطه ای یا RDBMS و یا XML ,.. ) این وظیفه توسطلایه دسترسی به داده انجام می شود.
به طورخلاصه، فرآیند مورد نظر ما این گونه کار می کند:
- کاربر برای داده های برنامه درخواستی ارسال می کند.
- لایه Data Access داده های مورد نظر را بازیابی می کند و از طریق لایه Business Logic آنها را به لایه نمایش می فرستد.بعضی مواقع لایه دسترسی به داده ها، این داده ها رامستقیما به لایه نمایش ارسال می کند.
- لایهنمایش اطلاعاتی که باید نمایش داده شوند را از طریق لایه Business Logic دریافت میکند.
- کاربر داده ها را تغییر می دهد و عمل مناسب در مورد آن ها را اجرا می کند ( مثلاضافه یا به روز کردن داده ها )
- لایه Business Logic صحت داده های وارد شده توسط کاربر را بررسی می کند ( داده ها رااعتبار سنجی می کند)
- اگرداده ها معتبر باشند آن ها را برای به روز رسانی در بانک اطلاعاتی به دست لایهدسترسی به داده می سپارد.
مزیتهای برنامه های چند لایه
- برنامه ها به چند بخش منطقی جدا از هم تقسیم می شوند و اتصال میان UI ( رابط کاربری ) ، پردازش ها و بانک اطلاعاتی کم می شود.
- تغییر در بانک اطلاعاتی یا روال های دسترسی به داده ها تاثیری در لایه نمایش یابرنامه کلاینت نخواهد گذاشت.
- برنامه کلاینت با عباراتSQLآمیخته نخواهد شد.
- نامجداول و ستون ها به طور موثری از برنامه کلاینت حذف می شوند.
- برنامه کلاینت نمی فهمد که داده ها از کجا آمده اند ( چیزی که به آن transparency location گفته می شود )
- تغییر یا گسترش برنامه بسیار ساده تر خواهد شد، بدون نیاز به تغییر یا کامپایل مجددبرنامه کلاینت.
نکتهمنفی در معماری چند لایه این است که شما باید تعداد زیادی بخش ها و کلاس های از همجدا در نرم افزار بسازید. اما به هر حال مزایای این روش بیشتر و برتر از معایب آناست.




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

دوانتخاب اصلی برای ساخت یک لایه نمایش در دات نت وجود دارد. آنها فرم های ویندوزی یافرم های وبی ASP.NET هستند.
بااستفاده از ویندوز فرم ها شما می توانید برنامه های دسکتاپ فرم محور ( form base ) معمول را بسازید. برنامه های ویندوز فرمی می توانند المان های رابط کاربری بسیارغنی به کاربرپیشنهاد کنند.آن ها کم و بیش شبیه به فرم های ویژوال بیسیکهستند.
جذابترین گزینه برای توسعه لایه نمایش استفاده از وب فرم هایASP.NETاست. کنترل هایی مثل دیتاگرید،دیتالیست و تقویم ( Calendar ) یک رابط کاربری قدرتمند را با مقدار کمی کد فراهم میکنند.
انتخابهایی که در بالا برای ساخت یک لایه نمایش بررسی کردیم می توانند توسط زبان های مختلفی مثل سی شارپ یا ویژوال بیسیک دات نت پیاده سازی شوند.



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

لایه Business Logic از چندین بخش که کارهایی نظیر اعتبار سنجی کار، گردش کار یا کارهایمشابه را انجام می دهند تشکیل شده است.
کامپوننتهای دات نت این لایه را شکل می دهند. شما می توانید با interop از کامپوننت های COM استفاده کنید ولی این کار کارآیی را پایین خواهد آورد.
وبسرویس های ASP.NET هم می توانند به عنوان یک business logic عمل کنند. اما به هرحال آن ها را نمی توان در همه شرایط به عنوان جایگزین کامپوننت ها به کار برد. وبسرویس ها تنها زمانی قابل استفاده خواهند بود که اعتبار سنجی در جایی بیرون از شبکهشما اتفاق افتاده باشد.
کامپوننتهایی که شما توسعه می دهید به ماندن روی ماشین های مشابه نیازی ندارند. با استفاده از .NET Remoting شما می توانید آن ها را روی چندین ماشین توزیع کنید.


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

اینلایه با دستکاری داده ها مثل اضافه ، حذف و به روز رسانی آن ها سر و کار دارد. دادههایی که به آن ها اشاره کردیم می توانند در RDBMS یا XML قرار داشته باشند. شماباید لایه دسترسی به داده را چنان طراحی کنید که دیگر لایه ها نیازی به دانستنوضعیت انبار داده ها نداشته باشند.
ADO.NET فناوری دسترسی به داده تحت دات نت است. اگر چه ADO.NET از طریق کلاس های DataReader اجازه دسترسی به داده های در هنگام اتصال را می دهد ولی بیشترین تمرکز روی دسترسیبه داده ها در زمان متصل نبودن است. دیتاست نقش کلیدی را در این مورد بازی می کند. در بعضی موارد شما می توانید ADO را هم برای دسترسی به داده ها استفاده کنید ولیاستفاده از آن باید دلیل معتبری داشته باشد. از ADO استفاده نکنید فقط به خاطراینکه RecordSet ها را دوست دارید !
این جاهم کامپوننت های دات نت لایه را تشکیل می دهند. همان طور که قبلا گفته شد شما میتوانید از کامپوننت های کلاسیک COM هم استفاده کنید.
همچنینوب سرویس ها هم می توانند لایه دسترسی به داده را شکل دهند. این مخصوصا زمانی درستاست که دیتابیس شما فراهم کننده ( provider ) داده ندارد. در این گونه موارد شما میتوانید مقداری کد برای اتصال به داده ها و پر کردن دیتاست ها و بازگرداندن نتایجدرون دیتاست به درخواست کننده داده بنویسید.
علاوهبر ADO.NET شما می توانید از امکانات سیستم مدیریت دیتابیس خود مثل توابع و یا روالهای ذخیره شده ( Stored Procedures ) استفاده کنید.


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

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