PDA

View Full Version : طرح ارتقاء سطح علمی و طراحی 3 لایه برنامه ها



Alireza Orumand
یک شنبه 03 خرداد 1388, 10:54 صبح
همونطور که میدونید مبحثی به اسم طرح ارتقا سطح علمی کاربران سایت برپا شده که سناریو آخرش بحث در مورد طراحی برنامه چند لایه است. به همین خاطر گفتم شاید اگر اینجا هم بحثی داشته باشیم در مورد طراحی و پیاده سازی برنامه های سه لایه در asp.net میتونه مفید باشه.:لبخندساده:
در حال حاضر طراحی برنامه های 3 لایه توی وب یکی از مسائلی هست که همه ما با اون سر و کار داریم. برای خود من هم همیشه این یک سوال بوده که چه روشی رو استفاده کنم که هم از نظر طراحی برنامه من درست باشه و هم سریع به نتیجه دلخواه برسم.
از بین روش های مختلفی که توی اینترنت پیدا کردم به نظر خودم دوتا روش
1- http://imar.spaanjaars.com/QuickDocId.aspx?quickdoc=416

2- http://www.asp.net/learn/data-access/#intro

نسبت به بقیه قابل تامل تر بودن و در واقع دیگران هم یکی از همین دو روش رو برای خودشون استفاده میکردن البته با کمی تغییر. من خودم از روش اول استفاده میکنم یعنی میام و از روی جداول دیتابیسم یکسری class در میارم و با این کلاس ها کار میکنم و در حقیقت از object data source استفاده میشه. و روش دوم هم استفاده از TableAdapters رو پیشنهاد میکنه.
از همه استاتید که در این زمینه توانایی و تجربه دارن درخواست میکنم که اگه میشه اینجا بیایم و راجع به مزایا و معایب هر کدوم از این روش ها با دلیل و منطق بحث کنیم تا در نهایت با استفاده از این بحث هر کس با توجه به کاری که میخاد انجام بده بتونه یکی از این روش ها رو انتخاب کنه.
در ضمن من چند وقتی هست که از روش اول استفاده میکنم و تقریبا مقالات اون روش رو ترجمه کردم که بعد از تکمیل شدن در همین قسمت برای استفاده دوستان قرار میدم. اگر کسی روش دوم رو ترجممه کرده اگه لطف کنه و اینجا قرار بده ممنو میشم.

اول مطلب رو پست کردم اما با بحث ها به وجود آمده فهمیدم یه نکته ای قبل از ادامه بحث لازمه که روشن تا بعضی تفاوت های بنیادین معلوم بشه به همین خاطر مطلب رو ویرایش کردم.
نکته: از نظر معماری نرم افزار میشه معماری های مختلفی رو نام برد مثل معماری سه لایه ، MVC، سرویس اورینتد و ... که برای دیدن لیست اونها و آشنایی مقدماتی با هر کدوم میتونید به اینجا (http://en.wikipedia.org/wiki/Architectural_pattern_%28computer_science%29) مراجعه کنید.بحث این تاپیک صرفا روی معماری سه لایه میباشد. پس لطفا با فقط در مورد روش های پیاده سازی این معماری در asp.net بحث بفرمایید.
موفق باشید.

Alireza Orumand
یک شنبه 03 خرداد 1388, 10:55 صبح
چراغ اول رو هم خودم روشن میکنم.
در مورد مزایای روش اول:
1- واقعا به جز لایه دیتا هیچ جای دیگه توی برنامه با دیتا کار نمیشه.
2- توی لایه business کار کردن با اشیا خیلی راحته و نیازی به تبدیل و cast کردن وجود نداره.
اما از معایب این روش اگر بخام بگم
1- زمان زیادی باید صرف ساختن کلاسهای مورد نیاز از روی جداول دیتابیس بشه. که البته در بعضی موارد orm ها کار رو کمی ساده میکنن
2- وقتی میخایم داده ها رو از datareader بخونیم و به نوع کلاس خودمون تبدیل کنیم این کار با خطا و زمان زیاد همراه است.
موفق باشید

ali.akhbary
یک شنبه 03 خرداد 1388, 12:31 عصر
این یه مثال بدون دیتابیس.!!!!!!!!!!!
یه لایه business
یه لایه data
لایه ui
اینجا سه تا ui با همون دو لایه داریم.
لازم به ذکره که این مال کنفرانس دانشگاه آزاد کاشان هست. که جناب آقای مهندس قمصری زحمت کشیدن. با تشکر.

iman_22a
یک شنبه 03 خرداد 1388, 13:09 عصر
با سلام . MVC Framework یه نمونه بارز از معماری سه لایه هست که اخیرا منتشر شده . اگر در موردش صحبت بشه بد نیست .

Alireza Orumand
یک شنبه 03 خرداد 1388, 14:20 عصر
سلام


این یه مثال بدون دیتابیس.!!!!!!!!!!!
یه لایه business
یه لایه data
لایه ui
اینجا سه تا ui با همون دو لایه داریم.
لازم به ذکره که این مال کنفرانس دانشگاه آزاد کاشان هست. که جناب آقای مهندس قمصری زحمت کشیدن. با تشکر.

ممنون از توجه شما. ولی هدف ما اینجا قرار دادن نمونه کد نیست. نمونه کد هر دو معماری در لینک هایی که بالا گذاشتم موجوده. اگر ممکنه در مورد مزایا و معایب این روش ها صحبت کنید.
من برنامه ای که شما فرستادید نگاه کردم.
با یه نگاه اجمالی به این معایب رسیدم
1- زمان زیادی باید صرف ساختن کلاسهای مورد نیاز از روی جداول دیتابیس بشه. یعنی دقیقا همون مشکلی که در روش اول وجود داره.
2- کار تبدیل اطلاعات از datatable به یک شی از جنس کلاسی که ما ساختیم توی لایه business انجام شده و این کار خودش باعث میشه که ما مجبور بشیم که از system.data در لایه business استفاده کنیم. این کار به کمک یک متد استاتیک در همون لایه دیتا میتونه انجام بشه. هم کار مجتمع تر میشه و هم از data توی لایه businessخبری نبود.
مزیتی نسبت به روش اول توی این کار ندیدم. میشه اگر شما نکته ای به ذهنتون میرسه بیان کنید.


با سلام . MVC Framework یه نمونه بارز از معماری سه لایه هست که اخیرا منتشر شده . اگر در موردش صحبت بشه بد نیست .

از توجه شما هم خیلی متشکرم.
همونطور که میدونید MVC یک design pattern که از زمان بسیار قدیم مورد استفاده بوده و شما اگر به این pattern تسلط داشته باشید در تمامی زبان ها و حتی نسخه های قدیمی همین .net خودمون میتونید از این pattern رو استفاده کنید. تنها چیزی که باعث شده این روزها اینقدر روی زبون باشه و همه به این pattern به چشم یک framework نگاه کنن اینه که مایکروسافت که همیشه کار رو برای کاربران راحت میکنه اومده و یک سری تنظیمات و کارهای عمومی رو انجام داده و اسمش رو گذاشته mvc framework و تا جایی که من دیدم در حقیقت همون mvc pattern هست. و صد البته انتشار اولیه این کار هم مربوط به تقریبا آذر ماه سال 86 میشه که به نظر زیاد جدید نمیاد.
در کل اگر نظر شما اینه که فقط در مورد همین framwork اینجا صحبت کنیم باید بگم هدف این تاپیک بررسی مزایا و معایب معماری های مختلفه نه صرفا بحث در مورد یک معماری خاص. اگر هدفتون بحث صرفا روی mvc هست میتونید تاپیک جدایی درست کنید که اونجا در موردش صحبت کنیم. اما اگر شما هم میخاید این معماری رو با بقیه معماری ها مقایسه کنید همینجا در خدمت شما هستیم.
اما برسیم به mvc:
اولین چیزی که من توی این معماری دیدم پیچیدگیه زیاد از حد اون و دست بال بسته آدم برای کار کردنه. به نظر من یک معماری زمانی کاراست که کمترین پیچیدگی رو داشته باشه. درسته که در کل کار کردن با معماری سه لایه نسبت به معماری spaghetti در شروع کار دارای پیچیدگی بیشتریه. اما برای نگه داری و برخی موارد دیگه قابلیت هایی به برنامه نویس میده که ارزش این پیچیدگی و صرف زمان رو داره. ولی در مورد mvc این پیچیدگی خیلی زیاده و صد البته قابلیت خاصی در اختیار برنامه نویس نمیگذاره. مثلا اگر قرار باشه 1 ساعت با روش اول یا دوم کار کنم و به یه جایی برسم این زمان توی mvc میشه 2 ساعت ولی هیچ مزیتی در ازای این زمانی که صرف کردم در اختیار من قرار نمیده.
من در این مدت که روش کمی زمان گذاشتم چیز خاصی ازش ندیدم که ارزش زمان گذاشتن و کوچ کردن داشته باشه.
موفق باشید

amirjalili
یک شنبه 03 خرداد 1388, 16:32 عصر
MVC یه DESIGN PATTERN نیست..
الگوی mvc رو از دو جهت میشه دید:

1:به مثابه یک architectural pattern

2:به مثابه design pattern که در اینصورت به لحاظ معنایی مشابه الگوی Observer pattern. هستش..

Alireza Orumand
یک شنبه 03 خرداد 1388, 17:25 عصر
سلام


یه DESIGN PATTERN نیست..
الگوی mvc رو از دو جهت میشه دید:

1:به مثابه یک architectural pattern

2:به مثابه design pattern که در اینصورت به لحاظ معنایی مشابه الگوی Observer pattern. هستش..
مرسی از توجهتون. اگه مطلبی از جایی نقل میکنید لطفا کامل نقل کنید و در صورت امکان لینک مطلب رو هم ارائه بفرمایید. http://en.wikipedia.org/wiki/Model-view-controller (http://en.wikipedia.org/wiki/Model-view-controller:%DA%86%D8%B4%D9%85%DA%A9:)
:چشمک: (http://en.wikipedia.org/wiki/Model-view-controller:%DA%86%D8%B4%D9%85%DA%A9:)
MVC یک DESIGN PATTERN است. خودتون توی گزینه 2 این مورد رو گفتید که یک DESIGN PATTERN است. پس حرف اول شما که DESIGN PATTERN نیست صحیح نیست. اما در راستای اینکه اثبات بشه بحث در مورد گزینه اول شما در اینجا صحیح نیست خدمت شما عرض میکنم که:
2 حالت وجود داره برای MVC
MVC یک architectural pattern است. خوب اگر با این فرض بخوایم جلو بریم به این نتیجه میرسیم که MVC کلا ربطی به موضع بحث ما نداره. چرا؟ بخاطر اینکه حتما شما میدونید همونطور که mvc یک معماری محسوب میشه؛ Multitier نیز به نوبه خود یک معماری دیگه هست و ما اینجا در باره معماری Multitier و به طور خاص در مورد 3tire داریم بحث میکنیم. پس نتیجه اخلاقی اینکه معماری Multitier برابر با معماری Model-View-Controller نیست و این دو گزینه ماهیت های متفاوتی دارند و جایی که بحث روی روش های پیاده سازی نرم افزار با Multitier داره صورت میگیره اصلا نباید در باره Model-View-Controller صحبت کرد. جایی که داره در مورد نحوه پیاده سازی یک معماری صحبت میشه اگه ما بیام یک معماری دیگه رو نام ببریم به عنوان نحوه پیاده سازی معماری مورد نظر، ممکنه این شبهه رو به وجود بیاره که شاید ما تفاوت این دو معماری رو با هم نمیدونیم.
برای اصلاعات بیشتر از این موضوع رجوع کنید به
http://en.wikipedia.org/wiki/Architectural_pattern_(computer_science (http://en.wikipedia.org/wiki/Architectural_pattern_%28computer_science))
http://en.wikipedia.org/wiki/Multitier_architecture
پس در نتیجه فقط حالت دوم میتونه صحیح باشه یعنی اینکه MVC یک DESIGN PATTERN است که در این مورد در پست قبلی توضیح دادم.
موفق باشید.

emad8159
یک شنبه 03 خرداد 1388, 22:58 عصر
در معماری چندلایه تمام برنامه به چندین بخش تقسیم می‌شود. این بخش‌ها می‌توانند فیزیکی یا منطقی باشند. هر بخش کار خاصی را انجام می‌دهد مثلا نمایش interface کاربر یا دسترسی بهداد‌ه‌ها. برنامه می‌تواند به هر تعداد لایه داشته باشد ولی به هر حال بیش‌تربرنامه‌ها سه لایه‌ی مجزا دارند که عبارت‌انداز :

http://www.persian-ebuy.com/Articles/MultiLayerProgramming.aspx?IdFreeArticle=1005

Alireza Orumand
دوشنبه 04 خرداد 1388, 08:13 صبح
سلام

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

http://www.persian-ebuy.com/Articles/MultiLayerProgramming.aspx?IdFreeArticle=1005
فرض اولیه این پست این است که دوستان با معماری سه لایه آشنایی دارن و میخایم درباره شیوه های پیاده سازی این معماری و مزایا و معایبشون در برنامه های ASP.Net صحبت کنیم. پس خواهش میکنم درباره خود معماری سه لایه پست نگذارید. تاپیک داره از مسیرش منحرف میشه.
موفق باشید

ali.akhbary
سه شنبه 24 شهریور 1388, 09:49 صبح
لطقا این تایپیک رو ادامه بدید.

متشکر.

niksoft
سه شنبه 24 شهریور 1388, 18:16 عصر
سلام



از مزایایی که من در ام وی سی پیدا کردم



1 : میتوان لایه اینترفیس را بدون طراحی کردن با توجه به جدول مربوطه ساخت



2 : استفاده از entiry framework که به راحتی با دیتابیس کار میکند و شما بدون نوشتن پروسیجر میتوانید با 2 خط کد در لایه repository یا همان data access به ایجاد / حذف / ویرایش داده های جداول بپردازید



من در حال تحقیق در مورد انتقال به این روش هستم



ولی شاید به انعطاف پذیری روش های معمولی نباشد (البته با توجه به اطلاعات محدود من)



پروژه ای که خود مایکروسافت قرار داده است به نام contact manager که C#‎ , vb آن موجود است
http://www.ASP.NET/learn/mvc/tutorial-26-vb.aspx