PDA

View Full Version : گفتگو: پرسش و پاسخ در مورد برنامه نویسی شی گرایی ومتنی بر لایه و گسترش به تیر (tier)



mhdsbt
دوشنبه 25 مرداد 1389, 20:33 عصر
سلام

هر کی سوال در مورد بر نامه نویسی لایه ای وتیر داره میتونه تو این تاپیک بپرسه!:متفکر:

fidelio
دوشنبه 25 مرداد 1389, 22:18 عصر
سلام.
من مشکلم اصلا در فهم مسئله است.
هرچی می گردم هم نه یک مقاله و نه یک کتاب پیدا نمی کنم که برای مبتدیانی که راجع بهش چیزی نمی دونند ننوشته. کسی سراغ نداره یک منبع خوب؟

mhdsbt
چهارشنبه 27 مرداد 1389, 12:30 عصر
اگه بتونیم چرا که نه:متعجب:

منبع خاصی به زبان فارسی نیست ولی لاتین PDF داریم که به زودی تو این تاپیک
قرار میگیره.

zelham
شنبه 30 مرداد 1389, 11:07 صبح
سلام ببخشيد يه پروژه طراحي وب سايت براي سازمان اتوبس راني دارم که براي درس object oriented مي باشد که در قسمت مديريت به يک مشگل برخوردم . - يک کلاس دارم به نام company در داخل اين کلاس ليستي از نوع اتوبوس تعريف کرده ام مي خواهم وقتي روي دکمه انتخاب اتوبوس کليک مي کنم ليست اتوبوس ها را به من نشان دهد اما متاسفانه نمي توانم اين کار را انجام دهم ممنون مي شوم اگه کمک کنيد
ابتدا کد قسمت دکمه انتخاب اتوبوس را برایتان ارسال نمودم راستی تازه شنیدم که باید پروژه رو سه لایه ای کار کنم اگه می تونید در این باره هم کمک کنید ممنون می شم

List b = companymanger.getadmin().listbus(); this.GridView2.DataSource = b ;
2.this.GridView2.DataBind()



[
CODE]company public class company {
02.private static List listdriver = new List ();
03.private static List listbus = new List();
04.
05.public void newdriver(driveer d)
06.
07.{ listdriver.Add(d);
08.
09. } public void newbus(bus b)
10.
11. { listbus.Add(b); }
12.
13. public void deletedriver(string code)
14.
15. { foreach (driveer dd in listdriver)
16.
17. if (dd.getcodemeli() == code)
18.
19. listdriver.Remove(dd);
20.
21.driveer d = new driveer();
22.
23. d.deletedriver(code); }
24.
25. public static void deletebus(string code)
26.
27. { foreach (bus s in listbus)
28.
29. if (s.getentezaminumber() == code)
30.
31.

listbus.Remove(s);
32.
33.}
34. public driveer searchdriver(string code)
35. { driveer d = new driveer();
36.foreach (driveer dd in listdriver)
37. if (dd.getcodemeli() == code)
38. return dd;
// else return d;
39.} public bus searchbus(string entezaminumber)
40. { bus b = new bus();
41.for (int i=0; i getdriverlist()
42. { return listdriver; }
43. public List getlistbus()
44.{ return listbus; }
} [/CODE]

mrsalam
شنبه 30 مرداد 1389, 13:06 عصر
لینک ایراد دارد

mhdsbt
شنبه 30 مرداد 1389, 13:27 عصر
سلام در مورد معماري سه لايه و در كل چند لايه ميتونيد pdf ي كه تو تاپيك گذاشتم رو بخونيد.

fidelio
شنبه 30 مرداد 1389, 13:54 عصر
خیلی ممنون.
اما یک سوال.
اصولا معماری چند لایه در برنامه های ویندوز با کاربران محدود معنی ای داره؟ نوشتن یک برنامه که روی ماکزیمم دو کامپیوتر اجرا می شه با این نوع معماری؟
چون به نظر می رسه بیشتر اپلیکیشن هایی که تحت یک شبکه نوشته می شه از معماری 3 لایه یا سه تایر استفاده می کنند و در این اپلیکیشن ها حجم تراکنش و خود برنامه بالاست.

MAHDIACTION
شنبه 30 مرداد 1389, 19:25 عصر
سلام دوست من


اصولا معماری چند لایه در برنامه های ویندوز با کاربران محدود معنی ای داره؟ نوشتن یک برنامه که روی ماکزیمم دو کامپیوتر اجرا می شه با این نوع معماری؟
چون به نظر می رسه بیشتر اپلیکیشن هایی که تحت یک شبکه نوشته می شه از معماری 3 لایه یا سه تایر استفاده می کنند و در این اپلیکیشن ها حجم تراکنش و خود برنامه بالاست

احتمالا شما مفاهيم معماري 3 لايه رو خوب متوجه نشده ايد.
شماكمي بايد بيشتر در زمينه معماري 3 لايه تحقيق كنيد.
و پروژه هاي نمونه اين معماري رو حتما نگاه كنيد و سعي كنيد كمي تغيير بديد تا كامل دسته تون بياد.
معماري سه لايه رو حتي مي تونيد براي يك برنامه اي كه يك كاربر داره و روي يك سيستم نصب ميشه مي تونيد پياده سازي كنيد . در حقيقت يك تكنيك برنامه نويسي هست كه كد هاي شما رو تا جاي ممكن دسته بندي ميكنه زمان كد نويسي بيشتر ه ولي در نهايت نرم افزاري كه داريد اينه كه مي تونيد به راحتي ور‍ژن هاي جديد رو روانه بازار كنيد يا از كدها يا كلاس ها در برنامه هاي ديگري استفاده كنيد.
و مزاياي بسيار زياد در برابر معايب بسيار كم.

Pdf رو كه mhdsbt گذاشته رو حتما نگاه كنيد.

راستي من خيلي از اين معماري راضي هستم .

اگه سوالي بود من در خدمتم.

fidelio
شنبه 30 مرداد 1389, 19:42 عصر
احتمالا شما مفاهيم معماري 3 لايه رو خوب متوجه نشده ايد.
شماكمي بايد بيشتر در زمينه معماري 3 لايه تحقيق كنيد.


اینا قبول اما من واقعا گیج شدم. یعنی با این که می خونم اما دقیقا دستگیرم نمی شه. یعنی تئوری مشکلی نیست در کدینگ اش و این که چطوری کد رو دسته بندی کرد، فضاهای نام و متد ها رو واقعا هیچ ایده ای ندارم. اپن سورس ها هم تا اونجایی که من دیدم کمکی به این ضعف نکرده متاسفانه.

مهدی پیشنهادت چیه؟

MAHDIACTION
شنبه 30 مرداد 1389, 23:28 عصر
سلام دوست من
اميد وارم تو اين پست بتونم تا جايي كه امكان داره اين معماري رو تفهيم كنم.
اول مطالب زير رو يه مطالعه كنيد تا در ادامه با نمونه كد ها و پرو‍ژه بتونم بيشتر توضيح بدم.

معماری سه لایه :


مقدمه
در سیستمهای مهندسی و بخصوص سیستمهای نرم افزاری برای غلیه بر پیچیدگی , کل سیستم رو به چند Sub System تقسیم میکنن . در حین طراحی هر Sub system , ارتباط اون با سایر قسمتهای سیستم هم در نظر گرفته میشه و در نهایت این مجموعه رو به صورت یک مجموعه واحد در نظر می گیریم ...

معماری چند لایه : n-Tier
به طور کلی در معماری چند لایه , هر لایه T , سرویسهایی رو از لایه قبلی خودش T-1 دریافت و سرویسهایی رو به لایه بعدی خودش یعنی T+1 ارائه میده .

معماری سه لایه :
یکی از انواع معماری های چند لایه معماری سه لایه هست Three Tier ... ایده بوجود اومدن معماری سه لایه بعد از بوجود اومدن Web Page های Dynamic بود .
در این معماری Object های نرم افزار در سه لایه طراحی میشن .
بخش ها یا لایه های اصلی نرم افزار در این معماری عبارتند از :
1 - Presentation Layer : یا همون لایه Interface نرم افزار ... فرمها , واسطها و منوهاییو هر چیزی که برای کاربر قابل رویت باشه , در نرم افزارهای تجاری و کاربردی همگی در لایه نمایش یا Presentation قرار دارن .
این لایه در ارتباط با کاربر هست .

2 - Business Logic Layer : یا لایه تجاری ... که در بر گیرنده منطق اصلی برنامه هست .
در این لایه اعمال اصلی نرم افزار با استفاده از همکاری با لایه های پایین و بالا انجام میشه . در این لایه کار های مرتبط با DataBase وجود نداره و این وظایف تماما به لایه Data Access سپرده میشه .
این لایه در ارتباط با تیم برنامه نویسی هست.

3 - DataAccess Layer : لایه دسترسی به داده ها ... پایین ترین لایه در معماری سه لایه و البته مهمترین لایه در معماری سه لایه .
این لایه در رتباط با تیم مدیریتی و تیم برنامه نویسی هست .

مزایای معماری سه لایه :
مهمترین دساورد معماری سه لایه : استقلال قسمتهای مختلف پروژه با همدیگست .
تغییر زمینه کاربرد در حداقل زمان ... مثلا برنامه از Win App به Web App تبدیل بشه یا DataBase برنامه رو میشه به راحتی تغییر داد .

معایب معماری سه لایه :
از معماری سه لایه برای پروژه های کوچیک نمیشه استغاده کرد به علت حجم زیاد فایلها در این معماری .
Performance برنامه در معماری سه لایه پایینه چون ارتباطات لایه ها در این معماری زیاده .
منبع:
مطلب بالا رو نمي دونم از كدوم سايت گرفتم ولي اميد وارم نويسندش در پناه حق هميشه سربلندو موفق باشه.

حالا با مطالب بالا و آموزه هاي قبلي بحث رو عملي تر مي كنيم .
دقت كنيد تو پرو‍ژه هاتون بايد 3 تا پوشه درست كنيد
1-PL (Presentation Layer) يا UI (User Interface) داخل اين پوشه فرم هاي برنامه قرار مي گيرد .
2-BLL (Business Logic Layer)داخل اين پوشه كلاس هاي برنامه قرار مي گيرد كه ما به ازاي هر فرم دوتا كلاس داخل اين پوشه قرار مي دهيم يك كلاس براي Peraperty هاي شي و يك كلاس براي متدها كه ما اينچا اين كار را فقط براي اين مي كنيم كه متد ها از فيلد ها جدا باشد .
3-Dal(DataAccess Layer) كه همان Data Access Layer كه فقط يك كلاس داخل اين پوشه قرار مي دهيم كه اعمال ورودي و خروجي بانك را نشان مي دهد.
كد پايين رو نگاه كنيد .
اين كد مي تونه الگوي خوبي باشه.


اگه سوالي بود در خدمتم.

MAHDIACTION
یک شنبه 31 مرداد 1389, 15:19 عصر
سلام دوست من
آقا فايل رو دوباره دانلود كنيد .


Resource هاش مشكل داشت حل شد.

fidelio
یک شنبه 14 شهریور 1389, 22:55 عصر
"(Business Logic Layer)داخل اين پوشه كلاس هاي برنامه قرار مي گيرد كه ما به ازاي هر فرم دوتا كلاس داخل اين پوشه قرار مي دهيم يك كلاس براي Peraperty هاي شي و يك كلاس براي متدها كه ما اينچا اين كار را فقط براي اين مي كنيم كه متد ها از فيلد ها جدا باشد ."

دلیل خاصی داره که برای هر فرم دو کلاس قرار می دهیم؟ یعنی نمی شه که هر دو تا رو باید یک کلاس کرد؟ اگه نه چه مشکلاتی ایجاد می شه؟ این کلاس همون Value Object باید باشه، درسته؟

mhdsbt
دوشنبه 15 شهریور 1389, 14:07 عصر
قول: پرسش و پاسخ در مورد برنامه نویسی شی گرایی ومتنی بر لایه و گسترش به تیر (tier)
"(Business Logic Layer)داخل اين پوشه كلاس هاي برنامه قرار مي گيرد كه ما به ازاي هر فرم دوتا كلاس داخل اين پوشه قرار مي دهيم يك كلاس براي Peraperty هاي شي و يك كلاس براي متدها كه ما اينچا اين كار را فقط براي اين مي كنيم كه متد ها از فيلد ها جدا باشد ."

دلیل خاصی داره که برای هر فرم دو کلاس قرار می دهیم؟ یعنی نمی شه که هر دو تا رو باید یک کلاس کرد؟ اگه نه چه مشکلاتی ایجاد می شه؟ این کلاس همون Value Object باید باشه، درسته؟


نه دليل خاصي نداره ولي بهتره كه اين كار رو انجام بدين به عنوان مثال همنطور كه عمليات درج و ويرايش و حذف و ساير موارد رو توي فرم هاي مختلف قرار ميديم و اين درحاليه كه ميتونيم همه اين كار ها رو توي يه فرم انجام بديم و براي اينكه بر نامه نظم بيشتري داشته باشه اين كار رو انجام ميديم.يعني براي هر عمليات يك فرم جدا گانه در نظر ميگيريم.درست!
حالا تو ي بر نامه نويسي 3 لايه هم اينجوريه تقريبا ميخايم به كد هامون نظم بيشتري بديم و تمامي validation ها رو توي يك كلاس خاص متمركز كنيم اينطوري كارمون ساده تر و كد هامون خواناتر ميشه.البته با اين تواصيف هنوز هم ميتونيد به جاي 2 كلاس از يه كلاس استفاده كنيد و در عمل مشكلي پيش نمي ياد، قضاوت در مورد اينكه كدوم روش بهتره بر عهده خودتون.
موفق باشيد.

nazihosseinioun
چهارشنبه 12 آبان 1389, 13:11 عصر
سلام در مورد معماري سه لايه و در كل چند لايه ميتونيد pdf ي كه تو تاپيك گذاشتم رو بخونيد.
اين pdf ها كجاست؟

shima2006
چهارشنبه 12 آبان 1389, 14:56 عصر
كد پايين رو نگاه كنيد .
اين كد مي تونه الگوي خوبي باشه.


اگه سوالي بود در خدمتم.
فایل های ضمیمهhttp://barnamenevis.org/forum/images/attach/rar.gifSample 3 layer ().rar‏ (http://barnamenevis.org/forum/attachment.php?attachmentid=54560&d=1282475840) (478.9 کیلوبایت, 59 دیدار)

سلام دوست عزیز
توضیحاتتون بسیار مفید بود ولی متاسفانه من نمی تونم فایل ضمیمه رو اجرا کنم !!!
ویژوال استودیو 2008 و 2010 رو هم نصب دارم ولی نمی تونم کد رو ببینم ... اگه راهنمایی کنید ممنون میشم

MAHDIACTION
چهارشنبه 12 آبان 1389, 16:47 عصر
سلام دوست عزیز
توضیحاتتون بسیار مفید بود ولی متاسفانه من نمی تونم فایل ضمیمه رو اجرا کنم !!!
ویژوال استودیو 2008 و 2010 رو هم نصب دارم ولی نمی تونم کد رو ببینم ... اگه راهنمایی کنید ممنون میشم

سلام دوست من
فايل ضميمه قبل VS2005 بود ، حالا Vs2008 هست.

c_doost
یک شنبه 23 تیر 1392, 09:38 صبح
2 - Business Logic Layer : یا لایه تجاری ... که در بر گیرنده منطق اصلی برنامه هست .
در این لایه اعمال اصلی نرم افزار با استفاده از همکاری با لایه های پایین و بالا انجام میشه . در این لایه کار های مرتبط با DataBase وجود نداره و این وظایف تماما به لایه Data Access سپرده میشه .
این لایه در ارتباط با تیم برنامه نویسی هست.


سلام
من این توضیح را نفهمیدم یعنی در لایه اول که لایه ارتباط با کاربره و لایه سوم که لایه ارتباط با دیتابیسه ارتباط برقرار میکنه؟