ورود

View Full Version : گفتگو: سناریو 4 - معماری چندلایه(N-Tier/N-Layer Architecture)



علیرضا مداح
چهارشنبه 28 اسفند 1387, 09:31 صبح
سلام دوستان عزیز،
پیش از آغاز فعالیت ، تاپیک "آغاز پیاده سازی طرح ارتقاء سطح علمی - ذکر جزییات (http://www.barnamenevis.org/forum/showthread.php?t=120541)" را مطالعه نمایید ،
در یکسری مباحث قصد داریم تا بر روی معماری چندلایه و مطالب مرتبط با آن گفتگو و تبادل نظر کنیم تا در نهایت با روش های پیاده سازی این مغماری آشنا شویم،
لطفا" در هر مرحله از بحث، تنها بر روی سوال طرخ شده گفتگو نمایید و همچنین از Copy/Paste کردن مقالات دیگر سایت ها خودداری کرده و در صورت لزوم تنها به معرفی لینک بسنده نمایید،
در قدم اول بحث خود را با بررسی مزایای به کار گیری این معماری آغاز می کنیم؛

قدم اول:
1) مزایای بهره گیری از معماری چند لایه چیست؟ و در صورت عدم پیاده سازی این معماری چه مشکلاتی به وجود خواهد آمد؟

قدم دوم:
1) در معماری 3 لایه برنامه به چه بخش هایی تقسیم می شود و هر یک چه وظیفه ای را بر عهده دارند و چگونه با یکدیگر ارتباط برقرار می کنند؟
قدم سوم: کار بر روی یک مثال عملی

مرحله فعال: قدم سوم

پ.ن : مطالبی که از سوی بنده مطرح میشود ، جهت به چالش کشیدن بحث میباشد و بعضا" ممکن است ساده یا با جواب مشخص و معلوم به نظر بیایند ، این بدان خاطر است که قصد بر این است تا این گفتگوها برای افرادی با سطح علمی پایین تر نیز مفید واقع شود و ممکن است این مطالب در ذهن آنها نیز مطرح گردد ، همچنین جهت این است که تمام جوانب نظر شخص شرکت کننده در گفتگو مورد بررسی قرار گیرد،

آریوس1985
چهارشنبه 28 اسفند 1387, 10:04 صبح
فکر می کنم مثل هر تخصص دیگری، استفاده از استاندارد های تعریف شده باعث سهولت فهم برای هر کسی یا حتی خود فرد (در صورت رجوع به کد بعد از مدت زمان زیاد) می شود.
احتمال استفاده از راه های ناکارآمد هم رو هم میتونه کاهش بده.

hdv212
چهارشنبه 28 اسفند 1387, 16:42 عصر
قدم اول:
1) مزایای بهره گیری از معماری چند لایه چیست؟ و در صورت عدم پیاده سازی این معماری چه مشکلاتی به وجود خواهد آمد؟
استفاده از معماری چند لایه، برنامه نویسی رو شی گراتر، کد نویسی رو کمتر، اشکال زدایی رو راحتتر و قابلیت استفاده مجدد کد رو فراهم میکنه و به روند تولید نرم افزار سرعت میده.
هدف از معماری چند لایه، شکستن ساختار یک نرم افزار در حال تولید به قطعات کوچکتر است که هر کدام عهده دار وظایف خاصی هستند. بی شک،عدم استفاده از این معماری در تولید نرم افزار، امتیازات بالا رو به همراه نخواهد داشت!

ali_kolahdoozan
چهارشنبه 28 اسفند 1387, 19:41 عصر
لایه بندی امکان انجام کار گروهی ، و استفاده مجدد را فراهم میکند فرض کنید یک پروژه Windapp رو که لایه بندی هم شده بخواهیم ببریم و WebBase کنیم درصد زیادی از کدها مخصوصا لایه DAL و BL رو که تقریبا میشود کامل برد در پروژه بعدی . در ضمن شکل برنامه نویسی یک Tem خاص پیدا میکند که در صورت انجام یک پروژه با یک گروه برای کارهای بعدی هماهنگ تر میشود عمل کرد . زمان رو هم کم میکنه

اوبالیت به بو
چهارشنبه 28 اسفند 1387, 20:31 عصر
استفاده از معماری چند لایه، برنامه نویسی رو شی گراتر، کد نویسی رو کمتر، اشکال زدایی رو راحتتر و قابلیت استفاده مجدد کد رو فراهم میکنه و به روند تولید نرم افزار سرعت میده.
هدف از معماری چند لایه، شکستن ساختار یک نرم افزار در حال تولید به قطعات کوچکتر است که هر کدام عهده دار وظایف خاصی هستند. بی شک،عدم استفاده از این معماری در تولید نرم افزار، امتیازات بالا رو به همراه نخواهد داشت!
بدون نقص بود!


لایه بندی امکان انجام کار گروهی ، و استفاده مجدد را فراهم میکند فرض کنید یک پروژه Windapp رو که لایه بندی هم شده بخواهیم ببریم و WebBase کنیم درصد زیادی از کدها مخصوصا لایه DAL و BL رو که تقریبا میشود کامل برد در پروژه بعدی . در ضمن شکل برنامه نویسی یک Tem خاص پیدا میکند که در صورت انجام یک پروژه با یک گروه برای کارهای بعدی هماهنگ تر میشود عمل کرد . زمان رو هم کم میکنه
دقيقاً حتي احتياجي به جابه جايي DAL و BLL نيست و ميشه همون View كار رو به Web App تغيير داد كه با اين تغيير ساختار يه سري متدهايي هم بايد به DAL يا BLL اضافه بشه ولي در كل پيكربندي و استخوان بندي يا ساختار كار همون هستش. بهترين تعريف رو جناب hdv212 (http://barnamenevis.org/forum/member.php?u=14084) ارائه دادن.

mohsen_zelzela00
جمعه 30 اسفند 1387, 18:41 عصر
یک سوال از دوستان داشتم که آیا امنیت نرم افزار بالا میرود

Sajjad.Aghapour
دوشنبه 03 فروردین 1388, 02:16 صبح
فکر نکنم در امنیت نرم افزار تاثیری داشته باشه.چون شما می تونی همه کارهایی که در چند لایه می خواهی انجام بدی در یک لایه هم می تونی اون رو انجام بدی.....
همین الان یه مثال اومد تو ذهنم (البته نمی دونم تا چقدر می تونه مطلب رو برسونه)......
فرض کنید شما یک چند قطعه فلزی دارید که می خواهید اونها رو به هم وصل کنید.حالا شما می تونید اونها رو به هم جوش بدید یا اینکه اونها رو پیچ و مهره کنید.
به نظر شما اگه یکی از قطعه ها اشتباهی جاسازی داده شد یا اینکه قطعه ای پس از چند روز فرسوده شد توی کدوم روش می تونی راحت تر قطعه رو تعویض کنی؟
خوب مطمئنا اون که پیچ و مهره شده.در حالی که استحکام هر کدوم می تونه مثل هم باشه.....
هدف معماری چند لایه هم همین هست.همان طور که حامد جان توضیح دادن : "هدف از معماری چند لایه، شکستن ساختار یک نرم افزار در حال تولید به قطعات کوچکتر است که هر کدام عهده دار وظایف خاصی هستند.بی شک،عدم استفاده از این معماری در تولید نرم افزار، امتیازات بالا رو به همراه نخواهد داشت"....
در این صورت شما قدرت به روزرسانی بیشتر،باگ گیری سریعتر،سردرگمی کمتر و مزایای دیگه ای رو به پروژه ات اضافه کردی.......

hosseinsinohe
سه شنبه 04 فروردین 1388, 02:29 صبح
فکر نکنم در امنیت نرم افزار تاثیری داشته باشه.چون شما می تونی همه کارهایی که در چند لایه می خواهی انجام بدی در یک لایه هم می تونی اون رو انجام بدی.....
همین الان یه مثال اومد تو ذهنم (البته نمی دونم تا چقدر می تونه مطلب رو برسونه)......
فرض کنید شما یک چند قطعه فلزی دارید که می خواهید اونها رو به هم وصل کنید.حالا شما می تونید اونها رو به هم جوش بدید یا اینکه اونها رو پیچ و مهره کنید.
به نظر شما اگه یکی از قطعه ها اشتباهی جاسازی داده شد یا اینکه قطعه ای پس از چند روز فرسوده شد توی کدوم روش می تونی راحت تر قطعه رو تعویض کنی؟
خوب مطمئنا اون که پیچ و مهره شده.در حالی که استحکام هر کدوم می تونه مثل هم باشه.....
هدف معماری چند لایه هم همین هست.همان طور که حامد جان توضیح دادن : "هدف از معماری چند لایه، شکستن ساختار یک نرم افزار در حال تولید به قطعات کوچکتر است که هر کدام عهده دار وظایف خاصی هستند.بی شک،عدم استفاده از این معماری در تولید نرم افزار، امتیازات بالا رو به همراه نخواهد داشت"....
در این صورت شما قدرت به روزرسانی بیشتر،باگ گیری سریعتر،سردرگمی کمتر و مزایای دیگه ای رو به پروژه ات اضافه کردی.......


آفرين!!!
دقيقا همينه!
شكستن يك برنامه به قسمت هاي كوچكتر و سپس پيچ و مهره كردن اين قسمت هاي جدا.در اين حالت در صورت نياز به تغيير فقط بخش مورد نظر رو تغيير مي ديم.


اما سوال اينجاست كه چه روش ها و قوانيني وجود داره تا ما بتونيم يك برنامه بانك اطلاعاتي خودمون رو به صورت چند لايه پياده سازي كنيم.سپس از يك لايه در لايه ديگه استفاده كنيم!!!

amin_alexi
چهارشنبه 05 فروردین 1388, 00:15 صبح
با سلام به دوستان و تبریک سال جدید .... :قلب:

1) مزایای بهره گیری از معماری چند لایه چیست؟ و در صورت عدم پیاده سازی این معماری چه مشکلاتی به وجود خواهد آمد؟
فکر کنم یکی از مزایای استفاده از معماری چند لایه این باشه که میشه هر لایه رو در یک سیستم گذاشت و این باعث میشه در برنامه های گسترده و بزرگ ؛ سرعت و کارایی رو بهتر کنه و حال اگه همین چند لایه در یک سرور باشه بار زیادی رو روی سرور اعمال می کنه و تقسیم برنامه به چند لایه و انتقال لایه ها به سرور های مجزا امکان استفاده کاربران بیشتری رو از برنامه فراهم می کنه ...

Behrouz_Rad
چهارشنبه 05 فروردین 1388, 08:44 صبح
amin_alexi بهترین پاسخ رو داد.
هر چند که این مورد ممکنه به ندرت اتفاق بیفته که لایه ها رو بر روی سیستم های مختلف قرار بدید، اما در کل وقتی که مشکلی برای یکی از سیستم ها به وجود بیاد، لایه ی موجود بر روی اون سیستم می تونه به سیستم دیگه ای منتقل بشه.

موفق باشید.

majid325
پنج شنبه 06 فروردین 1388, 02:04 صبح
فکر نکنم در امنیت نرم افزار تاثیری داشته باشه.چون شما می تونی همه کارهایی که در چند لایه می خواهی انجام بدی در یک لایه هم می تونی اون رو انجام بدی.....
.

همچین هم بی تاثیر نیست , مخصوصا زمانی که هر لایه روی سیستم جداگانه ای قرار بگیره.

نظر شخصی بنده اینه که oop خودش رو درمعماری nلایه نشون میده و کاربر راحتر حسش میکنه.

Mohammad.Saheb
پنج شنبه 06 فروردین 1388, 10:07 صبح
در مورد امنيت تعجب كردم كه دوستان ميگن تاثيري نداره!

ضمنا يه سوال : اگه قرار باشه همه لايه ها تو يك pc باشن اين نوع پروژه اي چه خاصيتي داره ؟
چون معماري لايه اي بيشترين كاربردشون تو برنامه هاي توزيع شده هست

mohsen_zelzela00
پنج شنبه 06 فروردین 1388, 18:51 عصر
من هم وقتی دوست عزیزمان گفتند که در امنیت تاثیر نداره یه خورده تعجب کردم چون در یک مقاله خونده بودم که امنیت برنامه رو بالا میبره(مقاله به زبان لاتین بود)

majid325
جمعه 07 فروردین 1388, 04:23 صبح
ضمنا يه سوال : اگه قرار باشه همه لايه ها تو يك pc باشن اين نوع پروژه اي چه خاصيتي داره ؟


معماری n لایه نمیگه که هر لایه در یک pc نصب بشه , ماهیت بعضی از نرم افزار ها اینه که هر لایه در یک pc قرار بگیره و بعضی دیگه در این که همه لایه ها در یک pc قرار بگیرن .
خاصیتش هم در بازنویسی و ویرایش و سرعت کار و در نتیجه هزینه هستش.


چون معماري لايه اي بيشترين كاربردشون تو برنامه هاي توزيع شده هست

متوجه نشدم!!! خوب همه برنامه ها قرار توزیع بشن.

majid325
جمعه 07 فروردین 1388, 04:28 صبح
من هم وقتی دوست عزیزمان گفتند که در امنیت تاثیر نداره یه خورده تعجب کردم چون در یک مقاله خونده بودم که امنیت برنامه رو بالا میبره(مقاله به زبان لاتین بود)

البته معمولا وقتی از تاثیر امنیت در کنار معماری nلایه صحبت میکنیم , منظور امنیت داده ها هست.

Mohammad.Saheb
جمعه 07 فروردین 1388, 10:34 صبح
معماری n لایه نمیگه که هر لایه در یک pc نصب بشه , ماهیت بعضی از نرم افزار ها اینه که هر لایه در یک pc قرار بگیره و بعضی دیگه در این که همه لایه ها در یک pc قرار بگیرن .
خاصیتش هم در بازنویسی و ویرایش و سرعت کار و در نتیجه هزینه هستش.



متوجه نشدم!!! خوب همه برنامه ها قرار توزیع بشن.

منظورم Distributed Application هست

mohsen_zelzela00
جمعه 07 فروردین 1388, 19:08 عصر
البته معمولا وقتی از تاثیر امنیت در کنار معماری nلایه صحبت میکنیم , منظور امنیت داده ها هست.

دوست عزیز دقیقاً منظور من از امنیت امنیت داده هاست

majid325
جمعه 07 فروردین 1388, 19:36 عصر
منظورم Distributed Application هست

اگه منظورتون Software Engineering of Distributed Systems هست:

دقیقا(از منظر Software Engineering of Distributed Systems) این معماری در مقابله با مشکلاتی که در عدم استفاده از این معماری به وجود میاد , بر پا شده, این همون مسئله ای هست که شما هم بهش شاره کردین ولی به Location هر لایه ربطی نداره .

Mohammad.Saheb
جمعه 07 فروردین 1388, 20:16 عصر
این معماری در مقابله با مشکلاتی که در عدم استفاده از این معماری به وجود میاد , بر پا شده

تعريف شما از Distributed Systems اينه ؟


ولی به Location هر لایه ربطی نداره .
ميشه بيشتر توضيح بديد
يعني تو برنامه هاي توزيع شده لوكيشن هر لايه مساله نيست ؟ و همه لايه ها در يك pc ن

majid325
شنبه 08 فروردین 1388, 02:07 صبح
تعريف شما از Distributed Systems اينه ؟


من فقط سعی کردم در یک خط رابطه این معماری و Distributed Systems رو توضیح بدم , نه اینکه Distributed Systems رو تعریف کنم.


ميشه بيشتر توضيح بديد
يعني تو برنامه هاي توزيع شده لوكيشن هر لايه مساله نيست ؟ و همه لايه ها در يك pc ن
قبلا یه اشاره ی کردم.
وقتی میگیم Distributed Systems , یعنی داریم درباره سیستم های توزیع شده ی غیر متمرکز صحبت میکنیم , حالا این غیر متمرکز بودن, همون زمان که یک سیستم رو به n لایه تقسیم میکنیم به وجود میاد و اینکه یک سیستم nلایه در یک pc پیاده سازی بشه یا چند pc , تناقضی در Distributed Systems بودن سیستم ما ایجاد نمیکنه , مسئله پیاده سازی Distributed Systems در چند pc یا یک pc اول از همه به ماهیت یک سیستم ربط داره و در درجه دوم به میزان سرمایه گزاری...
در آخر ذات nLayer به صورت Distributed Systems و همین یکی از مزایای nلایه هست.

hosseinsinohe
شنبه 08 فروردین 1388, 11:16 صبح
بدون شك برنامه نويسي چند لايه در امنيت داده ها و سيستم و همچنين قابليت اطمينان سيستم تاثير به سزايي دارد.

يك برنامه مثلا 3 لايه را در نظز بگيريد.فرض كنيد به دليل بزرگ بودن سيستم و دلايلي ديگر هر بخش آن بر روي يك سيستم قرار بگيرد.مثلا DL بر روي يك سرور BL بر روي يك يا چند سرور ديگر و لايه سوم (لايه نمايش)بر روي كامپيوتر هاي كلاينت نصب گردد.در هنگام اجراي اين نرم افزار برنامه اي كه بر روي سيستم هاي كاربران نهايي شروع به انجام كار مي نمايد هيچ اطلاعي از ساختار لايه DL ندارد و فقط فرامين مربوطه را از لايه BL در خواست مي نمايد.در اين حالت به دليل اينكه برنامه به صورت مستقيم با لايه مربوط به داده ها در رابطه نيست به همين دليل امنيت بالا مي رود و سيستم ها براي دسترسي به داده ها بايد از يك لايه مياني عبور كرده تا به داده ها دسترسي پيدا كنند.
اين فقط جزيي از موارد امنيت اين نوع برنامه نويسي مي باشد.

موفق باشيد

http://www.new-npac.org/users/fox/documents/pajavaapril00/index_files/image004.jpg

علیرضا مداح
چهارشنبه 12 فروردین 1388, 09:55 صبح
از شرکت دوستان در بحث سپاسگزارم،
می توان تکات مهم بحث را اینطور خلاصه کرد:
1)در معماری چند لایه، برنامه به قسمت های کوچکتری تقسیم می شود که هریک وظیفه ی خاصی را بر عهده دارند، بدین معنا که هر Task(وظیفه) در لایه ی مخصوص به خود انجام می شود،
2)اگر لایه ها به طور فیزیکی از یکدیگر مجزا شده باشند، به هر یک از آن ها یک Tier گفته می شود و هر یک از این Tier ها می توانند بر روی یک سرور مجزا قرار گیرند(Distributed Applications)، (در یک Solution، برای هر Tier، یک پروژه جدید ایجاد می گردد)
3)در صورتی که لایه ها به طور منطقی از یکدیگر مجزا شده باشند، به هر یک از آنها یک Layer گفته می شود و عموما" تمامی لایه ها در یک پروژه قرار خواهد گرفت،
4)نگهداری(Maintenance) آسانتر می گردد، بدین صورت که با بهره گیری از یک سری استاندارد ها و فریم ورک ها و نیز برتامه نویسی شیء گرا این امر محقق می گردد،
5)امکان اضافه کردن یک لایه به لایه های موجود و یا تعویض یک لایه با یک لایه ی دیگر وجود دارد،
6)کار گروهی نیز بسیار منظم تر خواهد شد،
7)با بهره گیری از قوانین برنامه نویسی شیء گرا می توان هر تغییری در عملکرد برنامه را در کمترین زمان و با پایین ترین میزان تاثیر منفی در کارکرد سایر قسمت ها، اعمال نمود،
8)با به کار گیری مکانیزم های موجود، اشکال زدایی(Debugging) پروژه بسیار راحت تر خواهد بود و در حقیقت موجب ارتقاء Manageability سیستم می گردد،
9)امنیت(Security) نیز ارتقاء می یابد،
10)...

حال به سراغ مرحله ی دوم بحث می رویم و کار خود را با بحث بر روی معماری 3 لایه آغاز می کنیم؛
لطفا" پست اول (http://www.barnamenevis.org/forum/showpost.php?p=693286&postcount=1) تاپیک را مطالعه نمایید،
در ضمن لطفا" در هر مرحله از بحث تنها بر روی موضوع مطرح شده در همان مرحله متمرکز شوید تا بحث از مسیر اصلی خود منحرف نگردد،

iroonidotnet
چهارشنبه 12 فروردین 1388, 11:29 صبح
در معماری 3 لایه برنامه به چه بخش هایی تقسیم می شود و هر یک چه وظیفه ای را بر عهده دارند و چگونه با یکدیگر ارتباط برقرار می کنند؟


در معماری 3 لایه برنامه دارای بخش های زیر می باشد :

1) Presentation Layer لایه نمایش
2) Business Logic Layer لایه منطق
3) Data Access Layer لایه دسترسی به داده

در لایه دسترسی به داده هرگونه عملیات خواندن درج بروز رسانی و حذف داده های پایگاه داده را بر عهده می گیرد

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

مسولیت لایه نمایش از یه طرف نگهداری واسطه کاربری و تعامل با کاربر و از سوی دیگر تعامل با لایه منطق می باشد. یا بع عبارتی لایه نمایش از لایه منطق می تواند یک گردش کار را انتخاب کند . ولی هیج اطلاعی از آن ندارد.

hosseinsinohe
چهارشنبه 12 فروردین 1388, 16:51 عصر
تشكر مي كنم از دوست عزيزمون iroonidotnet

در يك برنامه 3 لايه،لايه داده (Data Layer) مي تواند يك يا چند Stored Proceture باشد كه حاوي دستورات Sql مي باشند و در زمان لازم اجرا مي شوند.وقتي كه از Stored Proceture ها استفاده مي كنيم باعت مي شود كه ديگر لازم نباشد دستورات Sql خود را توسط برنامه حاوي رابط كاربر به بانك اطلاعات بفرستيم و اين باعث مي شود كه برنامه ما در لايه هاي منطقي و نمايش اطلاعي از اين دستورات و ساختار آنها نداشته باشند.در ضمن استفاده از Stored Proceture باعث افزايش سرعت برنامه مي شوند.

لايه منطقي مي تواند يك سرويس وب (Web Service) باشد.در اين لايه قوانين تجاري و محاسبات برنامه قرار مي گيرند و همانطور دوست عزيزمون iroonidotnet گفتند اين لايه كه يك لايه مياني نيز مي باشد با لايه داده و نمايش در ارتباط است و مثلا داده ها را از لايه داده دريافت كرده و به لايه نمايش ارسال مي كند.تغييراتي كه در لايه نمايش بر روي داده ها انجام مي گيرد توسط لايه منطقي به لايه داده فرستاده مي شود.

لايه نمايش هم مي تواند يك برنامه Windows Application و يا Web Application باشد كه به عنوان يك رابط كاربر قرار گرفته و كاربر نهايي با آن در تعامل مي باشد.

Sajjad.Aghapour
چهارشنبه 12 فروردین 1388, 20:39 عصر
جناب مداح ببخشید.چند وقتی نبودم ،مجبور شدم یه flashback بزنم......


mohsen_zelzela00
من هم وقتی دوست عزیزمان گفتند که در امنیت تاثیر نداره یه خورده تعجب کردم چون در یک مقاله خونده بودم که امنیت برنامه رو بالا میبره(مقاله به زبان لاتین بود)

ممنون میشم مقاله رو بذارید یا اینکه لینکش رو بدید...


majid325
اینکه یک سیستم nلایه در یک pc پیاده سازی بشه یا چند pc , تناقضی در Distributed Systems بودن سیستم ما ایجاد نمیکنه

میشه یه توضیحی بدید.....

در فلسفه ایجاد N'Tier امنیت در برابر ویژگی های دیگه چه جایگاهی داره؟ یک برنامه ای که فقط در یک لایه پیاده سازی شده و در سطح کیفی بسیار خوبی از همه لحاظ هم قرار داره با همون برنامه که در چند لایه پیاده سازی شده،چند درصد از لحاظ امنیت فرق داره؟
چه تدابیری در چندلایه وجود داره که نمیشه در مورد اونها در یک لایه بحث کرد؟(از لحاظ امنیت)

amin_alexi
یک شنبه 16 فروردین 1388, 12:35 عصر
جناب مداح ببخشید.چند وقتی نبودم ،مجبور شدم یه flashback بزنم ...
نقل قول:
mohsen_zelzela00
من هم وقتی دوست عزیزمان گفتند که در امنیت تاثیر نداره یه خورده تعجب کردم چون در یک مقاله خونده بودم که امنیت برنامه رو بالا میبره(مقاله به زبان لاتین بود)
ممنون میشم مقاله رو بذارید یا اینکه لینکش رو بدید...فکر میکنم مساله امنیت بهتر در معماری چند لایه بدیهی باشه !!
استنباط خودم رو در مورد امنیت چند لایه با یک مثال توضیح می دم
یکی از روشهایی که معمولا برای دسترسی به اطلاعات (برای خرابکاری یا دزدی !) مورد استفاده قرار میگیره شناسایی سروری که اطلاعات در اون قرار داره ...
حال در معماری 3Tier شما برای دسترسی به اطلاعات باید اول Computer که لایه BLL در اون قرار داره شناسایی کنید و بعد بتونید به اون نفوذ کنید تا بتونید از طریق اون لایه DAL رو شناسایی کنید و بعد از طریق لایه DAL بتونید محل اطلاعات رو شناسایی کنید !!!
حال در معماری بدون استفاده از nTier که یک Client و یک Server داره شناسایی کامپیوتر Server که اطلاعات در اون قرار داره به مراتب راحتتره و در یک مرحله انجام میشه ... (البته نه به این راحتی که من نوشتم!!!)
پس من خودم نتیجه می گیرم که معماری nTier به امنیت سیستم کمک بسزایی می کند ...
(مگه اینکه دوستان گفته های من رو نقض کنند :چشمک:)

majid325
چهارشنبه 19 فروردین 1388, 06:45 صبح
میشه یه توضیحی بدید.....


نسبت به تعریف آقای مداح:
شما اون nلایه رو nTier بخونی , درست میشه.

علیرضا مداح
چهارشنبه 19 فروردین 1388, 08:52 صبح
دوستان عزیز، لطفا" بحث را از قدم دوم ادامه دهید،/

amin_alexi
چهارشنبه 19 فروردین 1388, 15:51 عصر
حالا یه مقدار در مورد چگونگی ارتباط لایه ها بحث کنیم (در مورد نحوه تقسم بندی و وظیفه هر بخش یه مقداری توضیح داده شد :تشویق: )
نحوه برقراری و دسترسی لایه ها به هم :
هر لایه می تواند تنها به کلاسها ،متد ها و Property های یک لایه پایین تر از خودش دسترسی داشته باشه ... به عنوان مثال لایه UI تنها می تواند به لایه BLL دسترسی داشته باشد و مجاز نیست از کلاسها ،متد ها و Property های لایه DAL استفاده کند (به نوعی مجاز نیستیم یک لایه رو دور بزنیم تا به لایه دیگه برسیم) و همچنین لایه DAL نمی تواند به کلاسها ،متد ها و Property های لایه BLL دسترسی داشته باشد (دسترسی به لایه بالاتر مجاز نیست ) .
فکر کنم با توجه به ماهیت هر لایه ما محدودیت در فرستادن اطلاعات بین لایه ها داریم مثلا اگه یک لایه Web Service باشه ما نمی تونیم هر نوع دادهای رو به لایه دیگه بفرستیم یا بگیریم مگر اینکه نوع داده ای که می خوایم انتقال بدیم رو به ساختار مجاز برای اون لایه تبدیل کنیم

majid325
پنج شنبه 20 فروردین 1388, 05:44 صبح
به نوعی مجاز نیستیم یک لایه رو دور بزنیم تا به لایه دیگه برسیم

در این مورد من شک دارم! از نظر کلی جمله شما صحیح است ولی بعضا موارد خاص هم وجود دارد تا این شبه قانون رو نقض کنیم.
من خودم تا حالا این کار رو انجام نداده ام(نقض کردن شبه قانون ذکر شده)

amin_alexi
جمعه 21 فروردین 1388, 14:15 عصر
در این مورد من شک دارم! از نظر کلی جمله شما صحیح است ولی بعضا موارد خاص هم وجود دارد تا این شبه قانون رو نقض کنیم.
من خودم تا حالا این کار رو انجام نداده ام(نقض کردن شبه قانون ذکر شده)
من فکر می کنم تحت هیچ عنوان مجاز به دور زدن نیستیم (دور زدن ممنوع !! :لبخند:)
از دوستان آیا کسی هست که بگه آیا میشه دور زد ؟! اگه آره به چه صورت ؟! آیا این کار مجازه !؟

h.jaza
چهارشنبه 26 فروردین 1388, 14:54 عصر
آیا این کار مجازه !؟
مجاز بودن یا نبودن، مهم نیست.
مهم اینه که ما لایه هامون رو طوری طراحی کنیم که نشه اساسا دورشون زد.

majid325
پنج شنبه 27 فروردین 1388, 07:20 صبح
من اين سؤال رو صفحه قبل پرسيدم ولي حذف شد. چطوري اينكار رو بكنيم؟ مثالي؟ كار عملي؟
با این دید که هر لایه یک پروژه(فضای نام) هست و برای کا با هر فضای نام باید آن را در پروژه (لایه) مورد نظر using کرد , میشه .

در مورد مثال و کار عملی:
فکر میکنم این تاپیک داره مسیر و هدف خاصی رو دنبال میکنه .

h.jaza
پنج شنبه 27 فروردین 1388, 09:24 صبح
با این دید که هر لایه یک پروژه(فضای نام) هست و برای کا با هر فضای نام باید آن را در پروژه (لایه) مورد نظر using کرد , میشه .
یعنی با این کار، دستری به DAL از طریق PL دیگه امکان پذیر نیست؟؟؟

علیرضا مداح
پنج شنبه 27 فروردین 1388, 09:58 صبح
یعنی با این کار، دستری به DAL از طریق PL دیگه امکان پذیر نیست؟؟؟

یکی از هداف برنامه نویسی چند لایه این است که لایه ی Presentation به طور مستقیم با لایه ی Data Access ارتباط نداشته باشد، پس در یک برنامه چندلایه که به طور صحیح پیاده سازی شده باشد، لایه ی Presention/UI به لایه ی Data Access دسترسی ندارد،
از ویژگی های برنامه چند لایه صحیح به زبان ساده این است که لایه ی UI "نمی داند Data از کجا آمده است." و از منبع داده اطلاعی ندارد، بدین معنا که تاکید میکنم در یک برنامه چند لایه صحیح، اگر دیتابیس ما به طور مثال از SQL Server به Oracle تغییر پیدا کند، نباید لایه ی UI تحت تاثیر قرار بگیرد،
اگر دقت کنید، به لایه ی Business Logics، لایه ی میانی(Middle-Tier/Layer) هم گفته می شود و در معماری 3 لایه واسطی است میان 2 لایه ی UI و DA.
خلاصه:
1)لایه UI توسط لایه BL(یا Middle-Tier) با لایه ی DAL ارتباط برقرار می کند.
2)لایه UI دسترسی مستقیم به دیتابیس و لایه DAL ندارد.
3)تغییر دیتابیس و منبع داده بر روی لایه UI تاثیری ندارد.
4)...
دوستان لطفا" عجله نکنید و اجازه دهید ابتدا یکسری مفاهیم روشن شود، پس از آن مثال عملی هم خواهیم داشت ،/

h.jaza
پنج شنبه 27 فروردین 1388, 10:25 صبح
نکات ذکر شده، کاملا درسته و هیچ شکی درش نیست؛ لکن در مورد کار تیمی چیکار میشه کرد...
به این معنی که من مثلا طراح DAL یا BLL هستم، حالا چطور می تونم دسترسی طراح UI رو به لایه ی DAL از اساس قطع کنم نه اینکه خود فرد از اون لایه استفاده نکنه به خاطر رعایت اصول معماری؟؟؟

iroonidotnet
جمعه 28 فروردین 1388, 11:51 صبح
نکات ذکر شده، کاملا درسته و هیچ شکی درش نیست؛ لکن در مورد کار تیمی چیکار میشه کرد...
به این معنی که من مثلا طراح DAL یا BLL هستم، حالا چطور می تونم دسترسی طراح UI رو به لایه ی DAL از اساس قطع کنم نه اینکه خود فرد از اون لایه استفاده نکنه به خاطر رعایت اصول معماری؟؟؟


در نظر بگیرید که ما می خوایم یک پروژه رو بر اساس اصول شروع کنیم . اگر میخوایم همه کار هامون بر اساس اصول باشه . قبل از اینکه بشینیم کد بنویسیم . باید در باره پروژه و همه ابعاد اون خوب صحبت کنیم . و برای کار گروهی باید کار ها رو بشکنیم. یکی از جنبه های صحبت های ما میتونه در باره توابع اصلی لایه های DAL و BLL باشه
اگر قرار باشه سه لایه رو سه نفر جداگانه انجام بدن . بهتر است همون اول بیایم امضای توابع رو با یک یکپارچگی خاص در درون لایه ها و کلاس هاشون قرار بدیم . بعد بیایم پیاده سازی این توابع رو در اختیار افراد قرار بدیم . این توابع ، توابعی هستند که کار ها و اهداف اصلی رو انجام میدن . حالا شاید یک برنامه نویس برای رسید به هدف این تابع از توابعی کمکی که خودش بوجود میاره استفاده کنه. به نظر بنده با این کار براحتی میشه برنامه ها با معماری چند لایه رو در اختیار چندین نفر گذاشت . و نگران سرعت کار اونها و عقب یا چلو بود لایه ای از لایه ی دیگر نبود. یکی از مزیت های این روش اینه که از همون اول دید بسیار خوبی از پروژه به شما میده

h.jaza
جمعه 28 فروردین 1388, 12:00 عصر
سوال من در این مورد نبود، نکاتی رو که شما ذکر کردین، مراحل پیاده سازی یه پروژه به صورت اصولی و منطقیه، اما سوالی که من دارم در مورد تظمین امنیت DAL هستش...

با تشکر

iroonidotnet
جمعه 28 فروردین 1388, 12:17 عصر
دوست عزیز میشه سوالتون رو یکم واضح تر مطرح کنید. ممنون از سوالتون

h.jaza
جمعه 28 فروردین 1388, 12:22 عصر
چطور میشه امنیت DAL رو تضمین کرد یعنی از UI اساسا نشه به DAL دسترسی پیدا کرد؟

راه حل شما چیه؟

آیا صرفا اینکه ما خودمون نریم سراغش، تضمینی به ما میده؟ (نه)

پ ن: اگر از بحث دارم خارج می شم، تذکر بدین...
با تشکر

iroonidotnet
جمعه 28 فروردین 1388, 12:44 عصر
با Web Service یا WCF میشه تا حد زیادی به این امر دست یافت .

h.jaza
جمعه 28 فروردین 1388, 12:55 عصر
با ویندوز هم کارای زیادی میشه انجام داد...

توضیح بده iroonidotnet (http://barnamenevis.org/forum/member.php?u=97032)
پ ن: این پست به نظرم بیشتر Off-Topic هستش ...
در صورت خروج از بحث، تذکر بدین
با تشکر

hosseinsinohe
جمعه 28 فروردین 1388, 16:27 عصر
Web Service در حقیقت میتونه پیاده سازی Bussiness Layer باشه.(واسط بین DAL و UI)

majid325
جمعه 28 فروردین 1388, 16:36 عصر
چطور میشه امنیت DAL رو تضمین کرد یعنی از UI اساسا نشه به DAL دسترسی پیدا کرد؟

راه حل شما چیه؟

آیا صرفا اینکه ما خودمون نریم سراغش، تضمینی به ما میده؟ (نه)

پ ن: اگر از بحث دارم خارج می شم، تذکر بدین...
با تشکر

اگه درست متوجه شده باشم شما نمیخواین کسی بدون اجازه از یک اسمبلی استفاده کنه؟
اگر جواب مثبت هست:
این مسله ای که شما مطرح میکنید مربوط میشه به امنیت اسمبلی که فقط مختصDALوBLL نیست و راهکارهای مختلفی داره و در همین سایت هم راجع بهش زیاد صحبت شده.

amin_alexi
شنبه 29 فروردین 1388, 16:30 عصر
Web Service در حقیقت میتونه پیاده سازی Bussiness Layer باشه.(واسط بین DAL و UI)

من فکر می کنم کار Web service یک چیزه دیگه باشه !
و کمتر به عنوان Bussiness Layer استفاده میشه !
معمولا یک DAL,BLL,WSL رو در کنار هم داریم !
(داریم از بحث اصلی تاپیک خیلی دور میشیم !!)
فکر کنم اگه بریم سره یک مثال عملی محوریت کار بیشتر حفظ میشه !!

h.jaza
شنبه 29 فروردین 1388, 16:41 عصر
هدف من از طرح مسائل گفته شده، بیشتر رسیدن به این معاریه:

http://barnamenevis.org/forum/picture.php?albumid=103&pictureid=502

و امثال اون و شرح جزئیات آونه ...

ولی اگر باعث خروج از بحث میشه، تذکر بدین ...

با تشکر

majid325
شنبه 29 فروردین 1388, 20:12 عصر
من فکر می کنم کار Web service یک چیزه دیگه باشه !
و کمتر به عنوان Bussiness Layer استفاده میشه !


اتفاقا من فکر میکنم که Web service هدفش ایجاد یک لایه میانی جهت استفاده از منابع اشتراکی هست.

amin_alexi
شنبه 29 فروردین 1388, 22:19 عصر
فاقا من فکر میکنم که Web service هدفش ایجاد یک لایه میانی جهت استفاده از منابع اشتراکی هست.
دقیقا !! :چشمک:
اما این به این معنا نیست که به عنوان BLL استفاده بشه !
معمولا یکی از مهمترن موارد استفاده از WebService در مواقعی است که سیستم ما یک سیستم توزیع شده باشه و ما دارای چندین BLL باشیم در این مواقع یکی از بهترین راه حل ها استفاده یک لایه به عنوان Web Service بین لایه UI و لایه BLL (که در حقیقت از چندین BLL تشکیل شده) می باشد که با این کار پیچیدگی دسترسی به اطلاعات رو برای لایه UI کمتر میکنه !

iroonidotnet
پنج شنبه 03 اردیبهشت 1388, 09:17 صبح
بسم الله الرحمن الرحیم

با سلام خدمت تمامی دوستان عزیز
تا به این مرحله همه دوستان نظرات خود رو در باره معماری چند لایه ارائه دادن . و دوست عزیزمون جناب مهندس مداح در هر مرحله نتیجه گیری کلی از بحث دوستان رو به صورت نکته وار بیان کردن . در این مرحله که نیاز به یک نمونه برنامه برای یادگیری هرچه بیشتر این معماری احساس می شد . بنده تصمیم گرفتم که با ارائه یک نمونه ای کوچک و ساده کمکی هرچند کوچک به افرادی که به تازگی با این معماری آشنا شدن کرده باشم.
با مشورتی که صورت گرفت قرار شد یک نمونه بصورت ساده ارائه شود و پس از اشکال زدایی و بهبود آن از طرف دوستان برنامه نویس ، در مراحل بعدی این نمونه ارتقاع پیدا کند و با افزودن فناوری های جدید به آن ، به یک نمونه کامل تبدیل گردد.در این نمونه کوچک تصمیم داریم با استفاده از معماری چند لایه برای مشخصات افراد یک فرم ایجاد کنیم.
طرز ایجاد این پروژه رو به اختصار توضیح میدم و اگر دوستان خواستند کد ها (هر چند که واضح اند) رو شرح خواهم داد و انشا الله دوستان در بر طرف کردن نواقص و بهبود این نمونه همکاری خواهند کرد.
1)یک پروژه ویندوزی با نام SimpleN-Tier را ایجاد کرده
2)برای ایجاد لایه ی داده (DataAccessLayer ) بر روی SimpleN-TierSolution راست کلیک کرده و از قست Add زیر منوی New Project … را انتخاب کرده و در فرم جدید بر روی Class Library کلیک کنید و در قسمت Name نام لایه داده خود را تایپ کرده و Ok را کلیک کنید . شما موفق به ایجاد لایه داده شده اید . ما در این قسمت برای هر موجودیت (فرم یا جدول یا ...) یک کلاس ایجاد می کنیم و در آن عملیات درج و حذف و بروز رسانی و انتخاب را قرار میدهیم . در این نمونه ما این عملیات را با استفاده از Stored Procedure انجام میدهیم. (کلاس ایجاد شده را با نام Class1 را حذف کنید)
3)حالا نوبت به ایجاد لایه منطق (BusinesseLogicLayer ) می باشد که مراحل آن دقیقا مانند لایه داده می باشد . بعد از اینکه موفق به ایجاد لایه منطق شدید . باید بتوانید بین لایه منطق و لایه داده ارتباط برقرار کنید .( همانطور که میدانید لایه منطق از لایه داده درخواست انجام عملیات درج و ... را میکنید .)برای اینکه لایه منطق بتواند به لایه داده دسترسی داشته باشد ، در لایه منطق بر روی References راست کلیک کرده و بر روی زیر منوی Add Reference کلیک کرده و در فرم ظاهر شده بر روی تب Projects رفته و در این صفحه لایه داده خود را انتخاب و بر روی Ok کلیک کنید . حالا شما میتوانید در لایه منطق از لایه داده استفاده کنید .(کلاس ایجاد شده را با نام Class1 را حذف کنید)

نکته : در زمان بار کردن یک DLL ، سیستم عامل تلاش می کند تا آن را در آدرس پایه ای که در DLL مشخص شده است ، قرار دهد . اگر این آدرس توسط قطعه ای دیگر اشغال شده باشد ، سیستم باید عملیات تصحیحی لازم برای پیدا کردن یک بخش خالی دیگر در حافظه و قرار دادن DLL در آدرس جدید را انجام دهد . هر بار که یکDLL بار می شود این فرایند از نو تکرار می شود. برای اینکه این مشکل حل شود می توان یک آدرس پایه یکتا را به یک DLLنسبت داد . که در این صورت دیگر هزینه تصحیح را نخواهیم داشت. در C#‎.Net میتوان ازفضای آدرس های بین &H004000000 و &H800000000 استفاده کرد.
برای این کار بر روی نام پروژه ی BusinesseLogicLayer راست کلیک کرده و زیر منوی Properties را انتخاب کرده و به قسمت Build رفته و بر روی دکمه Advanced کلیک کرده و در
فرم ظاهر شده مقدار فیلد DLL Base Address را به 0x11280000 تغییر دهید .

4)لایه نمایش همان لایه است که در ابتدا هنگام ایجاد پروژه بصورت خود کار به پروژه شما افزوده شد . (SimpleN-Tier) . همانطور که می دانید لایه نمایش باید به لایه منطق (BusinessLogicLayer ) دسترسی داشته باشد . بدین منظور همان کاری که در مرحله قبل صورت گرفت را تکرار می کنیم تا لایه نمایش بتواند به لایه منطق دسترسی داشته باشد.
5)در آخر باید در لایه نمایش بر روی نام پروژه SimpleN-Tier راست کلیک کرده و از زیر منوی گزینه Set as startup project را انتخاب کنید. حالا مراحل ایجاد یک پروژه 3 لایه به پایان رسید
. کد های نمونه برنامه تا حد زیادی قابل فهم و واضح می باشد . دوستان اگر در جایی مشکل داشتن مطرح کنند تا رفع ابهام شود یا در صورت لزوم کد ها اصلاح شود. فایل های دیتابیس همراه این پروژه قرار داده شده است.

با تشکر

علیرضا مداح
پنج شنبه 03 اردیبهشت 1388, 09:22 صبح
دوستان حال بر روی مثالی که کازیز iroonidotnet ارسال کردند بحث می کنیم،
لطفا" از ارسال پروژه خودداری نمایید و فعلا" تنها بر روی همین پروژه گفتگو نمایید،
هر زمان هم نیازی به تغییر در پروژه بود، کاربر iroonidotnet تغییران لازم را اغمال و پروژه جدید را آپلود می کنند،
از ایشان به خاطر این ارسال سپاسگزارم،/

esmaeily-hosein
پنج شنبه 03 اردیبهشت 1388, 11:40 صبح
من نیز دانلود کردم ،
مشکلات :
نبود لایه Common یا transfer object در لایه بندی .
نحوه پاس دادن مقادیر بین لایه ها اصلا صحیح نیست . (اگر جدولی 20 فیلد داشته باشد یعنی 20 پارامتر )
مشکل در پاس دادن مقدار Null
مقدار بازگشتی خطاها از طریق throw کردن exception نمیباشد .

معماری تا rapid خیلی فاصله داره .

iroonidotnet
پنج شنبه 03 اردیبهشت 1388, 14:27 عصر
دوست عزیز خیلی ممنون از پیشنهاد شما . قرار هست این نمونه به تدریج کامل بشه . و به یک پیاده سازی کامل تبدیل بشه.


نبود لایه Common یا transfer object در لایه بندی .
نحوه پاس دادن مقادیر بین لایه ها اصلا صحیح نیست . (اگر جدولی 20 فیلد داشته باشد یعنی 20 پارامتر )
مشکل در پاس دادن مقدار Null

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

اوبالیت به بو
پنج شنبه 03 اردیبهشت 1388, 14:42 عصر
البته اين روش پياده سازي در پروژه اي كه عمليات هاي زيادي داره يه خورده دردسر ساز ميشه. مثلاً شايد شما بخوايد عمليات هاي سيستم رو كه قرار هست در BLL پياده سازي بشه رو به صورت Project هاي مختلف در بياريد و هر Project براي خودش Class Libary هاي جداگانه اي داشته باشه. و اون موقع تشخيص BLL ها سخت ميشه. اين مثال براي UIL و DAL هم صدق مي كنه. شايد راه حل پيشنهادي اين باشه كه ClassLibary ها رو در يك Item دسته بندي مي كنيم ولي بازم مشكل ساز ميشه.
به هر حال اينم يك نوع پياده سازي هستش و مثل اينكه جواب هم داده.

نحوه پاس دادن مقادیر بین لایه ها اصلا صحیح نیست . (اگر جدولی 20 فیلد داشته باشد یعنی 20 پارامتر )
از ArrayList استفاده مي شه.

iroonidotnet
پنج شنبه 03 اردیبهشت 1388, 17:27 عصر
از ArrayList استفاده مي شه.

ممنون . اگر دوستان نظر دیگه ای دارند خوشحال میشم .


البته اين روش پياده سازي در پروژه اي كه عمليات هاي زيادي داره يه خورده دردسر ساز ميشه. مثلاً شايد شما بخوايد عمليات هاي سيستم رو كه قرار هست در BLL پياده سازي بشه رو به صورت Project هاي مختلف در بياريد و هر Project براي خودش Class Libary هاي جداگانه اي داشته باشه. و اون موقع تشخيص BLL ها سخت ميشه. اين مثال براي UIL و DAL هم صدق مي كنه. شايد راه حل پيشنهادي اين باشه كه ClassLibary ها رو در يك Item دسته بندي مي كنيم ولي بازم مشكل ساز ميشه.

کاملا با شما موافقم . ولی باید به این نکته توجه کنید که این نمونه خیلی ابتدایی و فقط جهت آموزش است .

esmaeily-hosein
یک شنبه 06 اردیبهشت 1388, 17:12 عصر
معمولا در پروژه های بزرگ کلاس هایی مانند Exception ها ، Enum و object های Data (میتواند tds یا ... )باشد .در این لایه قرار میگیرند . و بین پروژه های مختلف رد و بدل میگردند .
TypeDataSet و یا نمونه های معادل آن باعث خوانایی بیشتر سرعت نسبتا بهتر و .... برای ما به بار می آورد .
در همین مورد هم بجای ArrayList ما tds پاس میدیم .
اگر خواستید نمونه بزارم .

iroonidotnet
یک شنبه 06 اردیبهشت 1388, 19:05 عصر
دوست عزیز اگر میشه بیشتر در TypeDatasetمزایای و کلاس هایی که فرمودید (Exceptionمثل) بیشتر توضیح بدید . ممنون

ezamnejad
یک شنبه 06 اردیبهشت 1388, 21:31 عصر
بهتر نیست کانکشن از فایل config دریافت بشه که قابلیت تغییر ساده تری برای کاربر داشته باشه . و یک کلاس جداگانه برای دریافت و ثبت اطلاعات ایجاد بشه تا نیازی به استفاده از کانکشن در همه متدها نباشه . یک متد که sqlcommand به آن پاس داده بشه و نتیجه برگشت داده شود .
متدهای SelectRow و SelectAll مقدار برگشتی از نوع Dataset دارند که میشه این مقادیر را از نوع DataRow و DataTable انتخاب کرد .

esmaeily-hosein
پنج شنبه 10 اردیبهشت 1388, 18:40 عصر
TypeDataSet یا TDS ها نوعی از اشیا داده هستند . TypeDataSet های ما از DataSet به ارث میروند .


TypeDataSet در خودچه چیزی ذخیره میکنند :

مانند DataSet معمولی در خود جداول ، Relation مربوط به جداول و در کل میتوان گفت ساختار Data ما را در خود جا میدهد . و هر چیزی که در DataSet است در خود دارد . این اطلاعات در Compile time به ما ارایه میگردند نه runtime



چه مزیتی نسبت به DataSet دارد :

tds همانطور که گفتم در خود ساختار Data را دارد و لازم نیست در Runtime انها اضافه گردند همچنین با در اختیار قراردادن آن ساختار به ما کمک زیاد در سریعتر نوشتن کدها و خوانایی برنامه به ما میکند و از نظر performance هم وضعیت بهتری دارد .

tds ها با اضافه کردن Adpter ( Adpater نوعی pattern است . این class ها ابزار های کار با class های دیگر هستند )های مخصوص خود کمک زیادی به ما برای عملیات اصلی بر روی جداول میکند . (بدون نوشتن یک خط کد و همه چیز در Designer انجام میشود) در ضمن این class ها چون partial هستند در فایلهای فیزیکی جداگانه میتوان آنها را توسعه داد .


نحوه ایجاد :
بر روی پروژه کلیک لاست میکنیم و از قسمت Data گزینه DataSet را انتخاب میکنیم . میتوانیم از منوی view گزینه server explorer را انتخاب و پس از ساخت connection جداول آنرا به tds مان اضافه کنیم . اسم گزاری آن نیز معمولا نام class و انتهای آن DS میباشد مثلا UserDs




استثنا ها :

ما میخواهیم عملکرد کار خود را از یک لایه به لایه دیگر بفهمانیم .
مثلا در عمل اگر موجودی انبار کافی نبود با خطای ذخیره داده فرق میکند و ما میخواهیم این موضوع را به کاربر اعلام کنیم . برای این کار 2 راه داریم متد ما با return value های مختلف ما را آگاه کند .
مثلا اگر -1 بود برای نبود موجودی کافی و -2 برای خطا در ذخیره سازی مشکل این روش نبود خوانایی آن است .
در روش دوم استثنا های مختلفی را ما ایجاد میکنیم .
مثال :
new InventoryException("item not found");

hamed_gibago
دوشنبه 14 اردیبهشت 1388, 20:05 عصر
دوستان در پستهای قبلی یه مطلبی رو ذکر کردند که به نظر من اشتباهه
اینکه چند لایه نوشتن برنامه باعث کاهش کدنویسی میشه
که این دقیقا برعکسه

sedehi
دوشنبه 14 اردیبهشت 1388, 22:51 عصر
بهتر نیست کانکشن از فایل config دریافت بشه که قابلیت تغییر ساده تری برای کاربر داشته باشه . و یک کلاس جداگانه برای دریافت و ثبت اطلاعات ایجاد بشه تا نیازی به استفاده از کانکشن در همه متدها نباشه . یک متد که sqlcommand به آن پاس داده بشه و نتیجه برگشت داده شود .
متدهای SelectRow و SelectAll مقدار برگشتی از نوع Dataset دارند که میشه این مقادیر را از نوع DataRow و DataTable انتخاب کرد .

بهتر است يک لايه با نام COMMON در نظر بگيريم و اطلاعات کانکشن و برخي از توابع مشترک را در آن قرار دهيم تا نياز به چندباره کاري در تعريف کانکشن و توابع مشترک نباشد .

علیرضا مداح
سه شنبه 15 اردیبهشت 1388, 12:32 عصر
دوستان در پستهای قبلی یه مطلبی رو ذکر کردند که به نظر من اشتباهه
اینکه چند لایه نوشتن برنامه باعث کاهش کدنویسی میشه
که این دقیقا برعکسه

دوست عزیز چه دلیل فانغ کننده ای برای گفته ی خود دارید؟ لطفا" توضیحات بیشری ارائه دهید،/

sedehi
شنبه 19 اردیبهشت 1388, 14:09 عصر
دوست عزيز به اعتقاد من کاهش يا افزايش حجم کد نويسي بستگي مستقيم به نحوه تعريف لايه ها و نيز چگونگي معماري آنها دارد به نحوي که اين لايه بندي در درجه اول باعث کنترل و توسعه ساده تر پروژه گردد و در عين حال از کد نويسي هاي تکراري اجتناب شود . حال آنکه اگر به اين مهم که اساسا هدف از چند لايه کردن پروژه چيست توجه کافي نشود و صرفا بصورت کليشه اي و استاندارد شده با آن برخورد نمود به اعتقاد من نيز ممکن است باعث افزايش حجم کد نويسي و حتي در برخي موارد کاهش خوانايي برنامه گردد. به همين خاطر در گذشته در همين تاپيک درخواست نمودم که بحث را از پست 37# مجددا پي بگيريم تا تعريف عملي دقيقتري نسبت به تعيين لايه ها در يک پروژه کاربردي دست دهد که متاسفانه اين پست من توسط مديريت محترم حذف گرديد .

esmaeily-hosein
یک شنبه 20 اردیبهشت 1388, 10:19 صبح
تعريف عملي دقيقتري نسبت به تعيين لايه ها در يک پروژه کاربردي دست دهد که متاسفانه اين پست من توسط مديريت محترم حذف گرديد .
من فکر میکنم هدف این تاپیک نیز همین است .
من فقط مشکلی که هنوز میبینم ما بایستی ابتدا نسخه مورد استفاده در framework را تعیین کنیم بعد به سراغ layering بریم .
مثلا linq لایه بندی را تغییر داد .
من آماده همکاری فنی در این زمینه هستم فقط میگم قبلش مشخص بشه با Ds قرار کار بشه یا linq یا ا custome collection ها و یا تحت معماری NHibernate یا ... است . بعد شروع کنیم .
و به نظر من خیلی احمقانه است ما لایه بندی را در این 3 لایه فقط ببینیم.

sedehi
دوشنبه 21 اردیبهشت 1388, 11:13 صبح
معمولا در پروژه های بزرگ کلاس هایی مانند Exception ها ، Enum و object های Data (میتواند tds یا ... )باشد .در این لایه قرار میگیرند . و بین پروژه های مختلف رد و بدل میگردند .
TypeDataSet و یا نمونه های معادل آن باعث خوانایی بیشتر سرعت نسبتا بهتر و .... برای ما به بار می آورد .
در همین مورد هم بجای ArrayList ما tds پاس میدیم .
اگر خواستید نمونه بزارم .
با سلام
من خواهش ميکنم که نمونه اي در اين رابطه ارائه کنيد تا درباره آن نيز مختصري بحث کنيم تا پس از آن شايد راه حلي ساده تر براي لايه بندي در پروژه هاي بزرگ دست دهد :متفکر:

bTajahmadi
چهارشنبه 23 اردیبهشت 1388, 11:50 صبح
کسی از دوستان به تاثیر لایه بندی بر روی coupling اشاره نکرد. معمولا لایه ها را طوری در نظر می گیرند که کلاس های لایه های پایین هیچ اطلاعی درباره ی کلاس های استفاده کننده در لایه های بالاتر ندارند.

majid325
شنبه 26 اردیبهشت 1388, 13:58 عصر
کسی از دوستان به تاثیر لایه بندی بر روی coupling اشاره نکرد. معمولا لایه ها را طوری در نظر می گیرند که کلاس های لایه های پایین هیچ اطلاعی درباره ی کلاس های استفاده کننده در لایه های بالاتر ندارند.

پست 29 http://barnamenevis.org/forum/showthread.php?t=151744&page=3

h.jaza
شنبه 26 اردیبهشت 1388, 23:14 عصر
دوستان قرار نیست از اول یه معماری خیلی قدرتمند طراحی کنیم...

می خوایم پله پله بریم بالا...

بزارید یه شمه ی کاملی از پروژه آماده بشه، تا یه جای خوبی پیش بره، بعد کم کم به نواقصش می پردازیم و اونها رو برطرف می کنیم...

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

پس بزارید روی همون روالی که iroonidotnet (http://barnamenevis.org/forum/member.php?u=97032) شروع کرده تمرکز کنیم و با همون روند پیش بریم تا کم کم اون رو ارتقاء بدیم و نواقصش رو رفع کنیم نه که از اول به همه فرض ها هجوم ببریم که این اشتباهه و فلانه و بیسار...

با تشکر

sedehi
یک شنبه 27 اردیبهشت 1388, 10:00 صبح
دوست عزيز
من هم معتقدم که بايد بحث از يک روال مشخص تبعيت کنه ولي نظر من اين است که اول بايد به نحوه طراحي معماري و تعريف لايه ها به خوبي پرداخته شود و پس از آن به سراغ کد نويسي برويم چرا که :
خشت اول گر نهد معمار کج
تا ثريا مي رود ديوار کج

به هر حال اينم نظر منه ...

BestLover
جمعه 01 خرداد 1388, 02:33 صبح
سلام

می خواستم بدونم که اعمالی مثل Transaction رو در کد.م لایه باید پیاده سازی کرد و چطور به کاربر
اطلاع بدیم؟؟؟؟

با تشکر

In_Chan_Nafar
شنبه 09 خرداد 1388, 13:17 عصر
Transaction چون جزء فعاليت هاي DB است بايستي در DataLayer مديريت شود
اطلاعات Master و Detail بايستي به DataLayer‌جهت درج Transactional پاس شود

amin_alexi
شنبه 09 خرداد 1388, 16:15 عصر
Transaction چون جزء فعاليت هاي DB است بايستي در DataLayer مديريت شود
اطلاعات Master و Detail بايستي به DataLayer‌جهت درج Transactional پاس شود
البته به جای اعمال TransAction در DAL میشه تمام TransAction ها رو به Database فرستاد و در سمت Database اونها رو مدیریت کنیم !

محمدامین شریفی
پنج شنبه 14 خرداد 1388, 14:31 عصر
همانطور که می دانیید،هر فرم بصورت پیش فرض چند فایل به نام های:

Form1.Designer.cs

Form1.resx

Form1.cs

مورد بحث من Reversi.Designer.cs می باشد.


آیا استفاده از نام دامنه های


System.Windows.Forms



System.Drawing


System.Data

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

ممنون،

محمدامین شریفی
پنج شنبه 14 خرداد 1388, 20:34 عصر
همانطور که می دانیید،هر فرم بصورت پیش فرض چند فایل به نام های:

Form1.Designer.cs

Form1.resx

Form1.cs

مورد بحث من Reversi.Designer.cs می باشد.




آیا استفاده از نام دامنه های


System.Windows.Forms



System.Drawing

System.Data

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

ممنون،

خیر جزو قوانین چند لایه ای نمی باشد.برای کسی که بیشتر با asp.net کار کرده است.شاید این ابهام پیش بیاید که در win32 هم اینگونه است.ولی وقتی با خطای load فرم مواجه می شوید،این شبه برطرف می شود.نمی دانم شاید این یکی از مشکلات win32 در پیاده سازی چند لایه ای بوده است.
به هر حال با جایگزین شدن xaml چند لایه ای شدن مفهوم بهتری را گرفته است.

پیروز باشید.

mohsen_zelzela00
یک شنبه 14 تیر 1388, 19:19 عصر
با سلام خدمت دوستان عزیز
در برنامه نویسی ساخته یافته من برای اینکه یک textbox را Bindکنم از کد زیر استفاده میکردم(این کار را برای وقتی که می خواستم که وقتی کاربر بر روی یک رکورد در datagrid کلیک میکرد اطلاعات آن در textbox ها هم نشون داده بشه انجام میدادم)


TextBox1.DataBindings.Add(New Binding("text", dv, "id_a"))


الان که دارم برنامه نویسی 3 لایه کار میکنم فکر کنم باید این کد را در لایهDAL قرار دهم ولی اینجا این مشکل است چون لایه DAL من از نوعClassLibrary است واصلاً من در لایه DAL خودم نباید با اشیا لایهUI کار کنم این کد را چگونه و کجا بنویسم


با تشکر فراوان

majid325
یک شنبه 14 تیر 1388, 23:49 عصر
واصلاً من در لایه DAL خودم نباید با اشیا لایهUI کار کنم این کد را چگونه و کجا بنویسم
با تشکر فراوان

درسته ، در dal که هیچی در bll هم نباید این کار رو بکنی.
دقیقا حضور ذهن ندارم ولی اگه بگی رکورد ها رو چطوری پاس میدی به لایه ui ممکنه بتونم کمکت کنم، در ضمن شما میتونید پروپرتی های آبجکت های مختلف رو به هم bind کنید یعنی binding فقط به منبع داده مرتبط نیست.

mohsen_zelzela00
دوشنبه 15 تیر 1388, 01:10 صبح
.
دقیقا حضور ذهن ندارم ولی اگه بگی رکورد ها رو چطوری پاس میدی به لایه ui ممکنه بتونم کمکت کنم، در ضمن شما میتونید پروپرتی های آبجکت های مختلف رو به هم bind کنید یعنی binding فقط به منبع داده مرتبط نیست.
با استفاده از لیست generic انجام میدم شبیه اونی که در قسمت linq شما به پست من جواب دادید ممنون میشم کمکم کنید.......!

majid325
دوشنبه 15 تیر 1388, 19:17 عصر
نمیدونم روی روند تاپیک تاثیر مثبت میزاره یا منفی.
با توجه به هدف کد پست 74

TextBox1.DataBindings.Add("Text", DataGrid1.DataSource, DataGrid1.Columns[0].Name );

کد فوق رو تست نکردم اگه جواب نداد باید Interface مورد نظر (الان حضور ذهن ندارم) رو تو listپیاده سازی کنی.
اگه از linq استفاده میکنی که binding راحت تره...

majid325
چهارشنبه 17 تیر 1388, 02:46 صبح
یه نمونه از معماری 3لایه رو که بر پایه list پیاده سازی شده رو میزارم که بشه Performance با نمونه dataset ی مقایسه کرد ....
البته در روز های آتی سعی میکنم کامل ترش کنم.

m0rteza
سه شنبه 06 مرداد 1388, 18:01 عصر
ساخت لایه دسترسی به داده ها (Data Access Layer)
ساخت لایه تعریف داده ها (Common Data Definition)
لایه نمای کاربر (Presentation)
لایه قوانین سیستم (Business Rules)

توی لیست درسای آقای کرامتی بود
درباره دومی میشه توضیح بدید

بهنام بهمنی
دوشنبه 12 مرداد 1388, 18:05 عصر
ساخت لایه دسترسی به داده ها (Data Access Layer)
ساخت لایه تعریف داده ها (Common Data Definition)
لایه نمای کاربر (Presentation)
لایه قوانین سیستم (Business Rules)
توی لیست درسای آقای کرامتی بود
درباره دومی میشه توضیح بدید

به نظر می رسند اقای کرامتی برای دو گروه کلی دستورات sql (DDl,DML) دو لایه ارتباطی در نظر گرفته اند

majid325
پنج شنبه 15 مرداد 1388, 13:34 عصر
داد های که توسط ما تعریف میشن و در بین لایه ها مشترک هستن در این لایه تعریف میشن ،
مثل enum ها یا Exception و مواردی از این قبیل.

majid325
پنج شنبه 15 مرداد 1388, 13:42 عصر
حالا سوائلی که برام پیش امده اینه که وقتی متد GetData رو که در کلاس data در لایه bll به صورت زیر پیاده سازی شده :

private static List<Book> GetBooks(OleDbDataReader reader)
{
List<Book> tempBookList = new List<Book>();
while (reader.Read())
{
try
{
Book tempBook = new Book {ID = (int)reader["ID"],ISBN = reader["ISBN"].ToString(), Publisher = reader["Publisher"].ToString(), Title = reader["Title"].ToString(), Author = reader["Author"].ToString() };
tempBookList.Add(tempBook);
}
catch(Exception ex)
{
throw new Exception(ex.Message);
}
}
return tempBookList;
}

تناقضی که پیش میاد اینه که پارامتر reader رو ازنوع oledb تعریف کردم که اگه مجبور بشم لایه dal رو به sql تغییر بدم باید لایه bll رو هم تغییر بدم!!!!!!!!
راه حل دوستان چیه؟

Behrouz_Rad
پنج شنبه 15 مرداد 1388, 15:09 عصر
از IDataReader استفاده کن.

موفق باشید.

majid325
پنج شنبه 15 مرداد 1388, 18:48 عصر
با کمی تغییرات ، لطفا اشکالات فنی رو عنوان کنید.

majid325
پنج شنبه 15 مرداد 1388, 18:54 عصر
راستی برای Dynamic Query با توجه با اینکه اسامی فیلدها نباید در Presentation عنوان بشه چیکار باید کرد؟

Behrouz_Rad
پنج شنبه 15 مرداد 1388, 19:20 عصر
راستی برای Dynamic Query با توجه با اینکه اسامی فیلدها نباید در Presentation عنوان بشه چیکار باید کرد؟

ساختار دیتابیس (Schema) رو در یک فایل XML ذخیره کن و با XML Deserialization به شی تبدیل و
بخونش.

موفق باشید.

hdv212
پنج شنبه 15 مرداد 1388, 20:45 عصر
ساختار دیتابیس (Schema) رو در یک فایل XML ذخیره کن و با XML Deserialization به شی تبدیل و
بخونش.

بله درسته، در Visual Studio 2008 SP1 مایکروسافت نسخه جدیدی از فن آوری Ado.net رو ارائه داد به نام Ado.Net Entity Framework یا EF که میاد یک لایه ی دیگه بین لایه های نرم افزارتون اضافه میکنه به نام Conceptual Layer که کارش دقیقا همان چیزی هست که بهروز جان گفت، ساختار و اسکیمای دیتابیس شما رو در یک فایل Xml ذخیره میکنه، بنابراین نرم افزار شما مستقل از ساختار دیتابیس میشه و چنانچه تغییراتی در ساختار دیتابیس ایجاد کنید، نیازی به کامپایل مجدد برنامه ندارید بلکه فقط کافیه تغییرات مورد نظر رو در اون فایل Xml منعکس کنید.

در دات نت 4، این فن آوری به نسخه 4 ارتقا پیدا کرده و تغییرات اساسی فراوانی روش منعکس شده، اطلاعات بیشتر (http://blogs.msdn.com/adonet/archive/2009/06/22/announcing-entity-framework-feature-ctp-1.aspx).

majid325
پنج شنبه 15 مرداد 1388, 21:26 عصر
ساختار دیتابیس (Schema) رو در یک فایل XML ذخیره کن و با XML Deserialization به شی تبدیل و
بخونش.

موفق باشید.

با تشکر ، پیرو راهنمایی شما فعلا دارم دنبال یه Convert mdb to XML Schema ٰTools میگردم که free هم باشه .

majid325
پنج شنبه 15 مرداد 1388, 23:57 عصر
بله درسته، در Visual Studio 2008 SP1 مایکروسافت نسخه جدیدی از فن آوری Ado.net رو ارائه داد به نام Ado.Net Entity Framework یا EF که میاد یک لایه ی دیگه بین لایه های نرم افزارتون اضافه میکنه به نام Conceptual Layer که کارش دقیقا همان چیزی هست که بهروز جان گفت، ساختار و اسکیمای دیتابیس شما رو در یک فایل Xml ذخیره میکنه، بنابراین نرم افزار شما مستقل از ساختار دیتابیس میشه و چنانچه تغییراتی در ساختار دیتابیس ایجاد کنید، نیازی به کامپایل مجدد برنامه ندارید بلکه فقط کافیه تغییرات مورد نظر رو در اون فایل Xml منعکس کنید.

در دات نت 4، این فن آوری به نسخه 4 ارتقا پیدا کرده و تغییرات اساسی فراوانی روش منعکس شده، اطلاعات بیشتر (http://blogs.msdn.com/adonet/archive/2009/06/22/announcing-entity-framework-feature-ctp-1.aspx).

من هر چی سعی کردم نتونستم Provider رو برای oledb تغییر بدم ، ظاهرا فقط با ms sql رابطه برقرار میکنه.
اگه غیر از این است لطفا راهنمایی کنید.

محمدامین شریفی
جمعه 16 مرداد 1388, 00:27 صبح
فعلا دارم دنبال یه Convert mdb to XML Schema ٰTools میگردم که free هم باشه .
وقتی دیتابیس ساخته شد می توان بوسیله همون sql هم ، Schema را دید.
فکر کنم اگر dataset رو هم bind کنی،و با writexml (http://msdn.microsoft.com/en-us/library/system.data.dataset.writexml.aspx) میشه به Schema دست یافت.(توی برخی جاه هایی که محدودیت MDB داریم،می تونیم از write و read کردن xml عملکرد پایگاه داده را تا حدودی داشت،البته با این قابلیت یعنی می توان به همان قابلیت MDB رسید؟)

majid325
جمعه 16 مرداد 1388, 04:08 صبح
وقتی دیتابیس ساخته شد می توان بوسیله همون sql هم ، Schema را دید.
فکر کنم اگر dataset رو هم bind کنی،و با writexml (http://msdn.microsoft.com/en-us/library/system.data.dataset.writexml.aspx) میشه به Schema دست یافت.(توی برخی جاه هایی که محدودیت MDB داریم،می تونیم از write و read کردن xml عملکرد پایگاه داده را تا حدودی داشت،البته با این قابلیت یعنی می توان به همان قابلیت MDB رسید؟)

مشکل اینه که از dataset استفاده نمیکنم و بانکم هم همونطور که گفتید mdb.

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

Behrouz_Rad
جمعه 16 مرداد 1388, 09:07 صبح
من همیشه برای پروژه هام از این روش استفاده می کنم.
Schema ی دیتابیس رو مثلاً بدین شکل در فایل XML ذخیره کن:


<?xml version="1.0" encoding="utf-8" ?>
<TvtoDBSchema>
<Entities>
<Member name="tblMember">
<UserId>UserId</UserId>
<UserName>UserName</UserName>
<Pass>Pass</Pass>
<Email>Email</Email>
<InsertDate>InsertDate</InsertDate>
<UpdateDate>UpdateDate</UpdateDate>
</Member>
</Entities>
<SProc>
<GetMembers>GetMembers</GetMembers>
<InsertRole>InsertRole</InsertRole>
<InsertUser>InsertUser</InsertUser>
<UpdateUser>UpdateUser</UpdateUser>
</SProc>
</TvtoDBSchema>

وقتی که فایل با محتویات فوق در VS باز و انتخاب هست، از منوی XML گزینه ی Create Schema رو انتخاب کن. در این حالت، فایل XSD متناظر با فایل XML به طور خودکار تولید و نمایش داده میشه. اون رو ذخیره کن. حال فایل XSD رو به ابزار xsd که در SDK دات نت وجود داره به شکل ذیل پاس بده:


C:\XSD.exe myFile.xsd /c

یک فایل cs تحویل میگیری که حالت میانه ی شی گونه ی فایل XML هست که باید با XML Deserialization به شکل ذیل اون رو نهایی کنی:


public static TvtoDBSchema GetFieldNames(string schemaFilePath)
{
XmlSerializer xs = new XmlSerializer(typeof(TvtoDBSchema));
using (XmlReader xr = XmlReader.Create(schemaFilePath))
{
return (TvtoDBSchema)xs.Deserialize(xr);
}
}

حال به شکل ذیل به نام فیلد می تونی دسترسی داشته باشی:


MyClass.GetFieldNames("myFile.xml").SProc.GetMembers;

جالب بود. نه؟ ;)

موفق باشید.

پ.ن:
1) نحوه ی نگهداری Schema ی دیتابیس بستگی به نیازت و نوع پروژت داره. ممکنه نیاز باشه JOIN ها رو هم ذخیره کنی. این بستگی به خودت داره.
2) می تونی متد GetFieldNames رو private کنی و یک متد public با نام GetFieldName ایجاد کنی که GetFieldNames رو فراخوانی می کنه تا نیاز نباشه مدام مسیر فایل XML رو بنویسی.

موفق باشید.

majid325
جمعه 16 مرداد 1388, 18:19 عصر
ساختار و اسکیمای دیتابیس شما رو در یک فایل Xml ذخیره میکنه، بنابراین نرم افزار شما مستقل از ساختار دیتابیس میشه و چنانچه تغییراتی در ساختار دیتابیس ایجاد کنید، نیازی به کامپایل مجدد برنامه ندارید بلکه فقط کافیه تغییرات مورد نظر رو در اون فایل Xml منعکس کنید.


میشه یکی از دوستان راجع به این قسمت بیشتر توضیح بده؟


چنانچه تغییراتی در ساختار دیتابیس ایجاد کنید، نیازی به کامپایل مجدد برنامه ندارید

یعنی ما لایه های برنامه رو به صورت dynamic بسازیم؟

majid325
جمعه 16 مرداد 1388, 18:52 عصر
خیلی خیلی جالب بود ، من تونستم تمام مراحل به انجام برسونم ، فقط چند تا سوال :

فایل CS تولید شده در چه لایه ای باید تعریف بشه ؟
میشه از Cs تولید شده به جای Bll استفاده کرد؟ یا باید در کنار کلاس هاس bll مون ازش استفاده بکنیم؟

آیا در این روش با اون قسمت از گفته دوستمون hdv212 که در پست قبل ضمیمه کردم رابطه ای هست؟






<SProc>
<GetMembers>GetMembers</GetMembers>
<InsertRole>InsertRole</InsertRole>
<InsertUser>InsertUser</InsertUser>
<UpdateUser>UpdateUser</UpdateUser>
</SProc>




قسمت فوق مربوط به sp ذخیره شده تو دیتابیس هست؟


public static TvtoDBSchema GetFieldNames(string schemaFilePath)
{
XmlSerializer xs = new XmlSerializer(typeof(TvtoDBSchema));
using (XmlReader xr = XmlReader.Create(schemaFilePath))
{
return (TvtoDBSchema)xs.Deserialize(xr);
}
}

متد فوق رو در چه کلاسی تعریف کنم؟

Behrouz_Rad
جمعه 16 مرداد 1388, 22:28 عصر
فایل CS تولید شده در چه لایه ای باید تعریف بشه ؟
میشه از Cs تولید شده به جای Bll استفاده کرد؟ یا باید در کنار کلاس هاس bll مون ازش استفاده بکنیم؟

هیچ لایه! اینجور تصور نکن که حتماً کلاسی باید در لایه ای خاص تعریف بشه...! مثلاً کلاسی که Helper هست، لایه بودن در مورد اون معنا نداره.
پوشه ای با نام Schema بساز و فایل رو در اون قرار بده.


آیا در این روش با اون قسمت از گفته دوستمون hdv212 که در پست قبل ضمیمه کردم رابطه ای هست؟

منظور ایشون هم همین روش بود که Entity Framework ازش پیروی می کنه. همین حالت رو به شکل دیگه ای در فایل dbml ای که LINQ to SQL ایجاد می کنه هم شاهد هستی.


قسمت فوق مربوط به sp ذخیره شده تو دیتابیس هست؟

بله.


متد فوق رو در چه کلاسی تعریف کنم؟

در یک کلاس Helper.

موفق باشید.

majid325
شنبه 17 مرداد 1388, 03:29 صبح
حال به شکل ذیل به نام فیلد می تونی دسترسی داشته باشی:


MyClass.GetFieldNames("myFile.xml").SProc.GetMembers;



با تشکر از حوصله ای که بخرج میدین .
ببخشید بنا به توضیحات شما متد بالا فقط نام یه sp هست و برای بدست اوردن نام فیلد ها باید از یه همچین متدی استفاده بشه؟

MyClass.GetFieldNames("myFile.xml").Entities.Member.UserId;


پوشه ای با نام Schema بساز و فایل رو در اون قرار بده.

پوشه Schema رو تو Root سولشن ایجاد کنم؟

Behrouz_Rad
شنبه 17 مرداد 1388, 15:02 عصر
بنا به توضیحات شما متد بالا فقط نام یه sp هست و برای بدست اوردن نام فیلد ها باید از یه همچین متدی استفاده بشه؟

بله.


پوشه Schema رو تو Root سولشن ایجاد کنم؟

بله. و حتما Namespace های مناسب رو برای فایل های پروژت انتخاب کن. مثلاً همین فایل cs رو در Namespace ای با نام MyProject.Schema قرار بده.

موفق باشید.

majid325
شنبه 17 مرداد 1388, 15:28 عصر
نمیدونم چرا سوالهای که برام پیش میاد تو reSerch هام به جوابشون نمیرسم !!!!!

خیلی ممنون ، اگه فایل cs رو توی پوشه خارج از پروژه تعریف کنم دیگه نمیتونم از رفرنس اون توی پروژه مقصدم استفاده کنم!

من در لایه Presentation طبق روال قبل فیلد هایی رو که در Dynamic Query شرکت باید بکنند رو متوجهشون بشم و اسامیشون رو از داخل فایل xml بیرون بکشم و یک string حاوی Dynamic Query به لایه bll پاس بدم؟

از روش فوق میشه در هر لایه که نیاز به کوئری بود استفاده کرد؟

Behrouz_Rad
شنبه 17 مرداد 1388, 20:54 عصر
اگه فایل cs رو توی پوشه خارج از پروژه تعریف کنم دیگه نمیتونم از رفرنس اون توی پروژه مقصدم استفاده کنم!

خارج از پروژه؟ در داخل پروژه قرار بده! من پروژت رو الان دانلود کردم و دیدم از چند پروژه تشکیل شده. منظور من این بود که فایل cs رو در داخل پروژه قرار بده. بیرون بودن از Solution معنا نداره.


من در لایه Presentation طبق روال قبل فیلد هایی رو که در Dynamic Query شرکت باید بکنند رو متوجهشون بشم و اسامیشون رو از داخل فایل xml بیرون بکشم و یک string حاوی Dynamic Query به لایه bll پاس بدم؟

بله. در SQL Server از استورد پروسیجر سیستمی sp_executesql برای اجرای کوئری های داینامیک استفاده کن.


از روش فوق میشه در هر لایه که نیاز به کوئری بود استفاده کرد؟

بله.

موفق باشید.

majid325
یک شنبه 18 مرداد 1388, 05:35 صبح
خارج از پروژه؟ در داخل پروژه قرار بده! من پروژت رو الان دانلود کردم و دیدم از چند پروژه تشکیل شده. منظور من این بود که فایل cs رو در داخل پروژه قرار بده. بیرون بودن از Solution معنا نداره.
موفق باشید.

با توجه به اینکه من به اسامی فیلدها در سه لایه (سه پروژه)احتیاج دارم , در هر پروژه این فایل cs رو تعریف کنم یا یک پروژه چهارمی در نظر بگیرم و تو اون تعریفش کنم؟

Behrouz_Rad
یک شنبه 18 مرداد 1388, 11:01 صبح
به توضیحات قبلیم مراجعه کن. کمی هم جستجو و تحقیق کن.

موفق باشید.

m0rteza
سه شنبه 27 مرداد 1388, 15:32 عصر
وظیفه دقیق operational چی هست؟
تا اونجایی که من فهمیدم . کار هایی که در سیستم مکررا انجام می شه و در لایه ها مشترک هستند در این لایه قرار می دیم. مثلا log
دوستان لطفا یه توضیح کامل تر و کاربرد بیشتری ارائه دهند

k_m
شنبه 31 مرداد 1388, 18:14 عصر
با سلام
من تقریبا مطابق همین عکس کار می کنم. البته با یک کم تغییر .
من اینجوری تو پروژه هام کار می کنم.
1 لایه دارم به نام CommonFunction که توی اون یکسری توابع که همیشه و تو همه لایه ها ممکنه استفاده بشه رو پیاده سازی می کنم.مثل توابع تبدیل Enum جنسیت به text ، توابع کار با تاریخ و یا توابعی که بنا به اون پروژه تو همه لایه ها مورد استفاده اند. این فکر کنم همون لایه Operational باشه.
لایه بعدی لایه Data Access است که من اونو به 2 تا زیر لایه تقسیم می کنم: یکی معمولا DBML مربوط به Linq است و یکی DBaccess Extention که همانطور که از اسمش معلومه به صورت Extention پیاده می کنم و وظیفه کار با DB رو به عهده داره. من این کلاس رو همیشه Static پیاده می کنم و خروجی توابعش هم IQueryable است.
لایه بعدی Logic است که من این لایه رو هم به 2 تا زیر لایه تقسیم می کنم یکی UILogic و یکی DBLogic
زیر لایه UILogic وظیفه آماده کردن یک اینترفیس برای DBLogic را به عهده داره . همچنین چک کردن صحت ورودی ها و نیز کنترل امکان پذیر بودن عملیات با توجه به قوانین را به عهده داره.
زیر لایه DBLlogic هم وظیفه انجام ریز عملیات مربوط به یک فرآیند را با استفاده از فراخوانی توابع موجود در لایه DBAccess انجام میده.
لایه بعدی هم که UIهست و نیاز به توضیح نداره.
علاوه بر اینا من یک لایه دیگه هم می سازم به نام Objects که توی اون یک سری Object دارم که در واقع اطلاعات لازم رو بین لایه های UI و Logic منتقل می کنه .
من تو زیر لایه DBLogic هم دسترسی به DBML دارم که با بحثایی که اینجا شد نمی دونم این دسترسی درسته یا نه.
دوستان نظر بدین.

majid325
سه شنبه 03 شهریور 1388, 06:19 صبح
با سلام
من تقریبا مطابق همین عکس کار می کنم. البته با یک کم تغییر .
من اینجوری تو پروژه هام کار می کنم.
.
.
.
دوستان نظر بدین.

روشتون جالب هست ، اگه وقتشو دارین یک نمونه قرار بدین تا هم ار تجربیاتتون استفاده کنیم و هم با روشهای که دوستان دیگه ارائه کردن مقایسه کنیم(مزایا و معایب) تا شاید بعد از یه مدت بشه یک روش جالب از ترکیب روشهای ارائه شده ایجاد کنیم.

mohsen_zelzela00
یک شنبه 08 شهریور 1388, 02:31 صبح
با سلام
من تقریبا مطابق همین عکس کار می کنم. البته با یک کم تغییر .
من اینجوری تو پروژه هام کار می کنم.
1 لایه دارم به نام CommonFunction که توی اون یکسری توابع که همیشه و تو همه لایه ها ممکنه استفاده بشه رو پیاده سازی می کنم.مثل توابع تبدیل Enum جنسیت به text ، توابع کار با تاریخ و یا توابعی که بنا به اون پروژه تو همه لایه ها مورد استفاده اند. این فکر کنم همون لایه Operational باشه.
لایه بعدی لایه Data Access است که من اونو به 2 تا زیر لایه تقسیم می کنم: یکی معمولا DBML مربوط به Linq است و یکی DBaccess Extention که همانطور که از اسمش معلومه به صورت Extention پیاده می کنم و وظیفه کار با DB رو به عهده داره. من این کلاس رو همیشه Static پیاده می کنم و خروجی توابعش هم IQueryable است.
لایه بعدی Logic است که من این لایه رو هم به 2 تا زیر لایه تقسیم می کنم یکی UILogic و یکی DBLogic
زیر لایه UILogic وظیفه آماده کردن یک اینترفیس برای DBLogic را به عهده داره . همچنین چک کردن صحت ورودی ها و نیز کنترل امکان پذیر بودن عملیات با توجه به قوانین را به عهده داره.
زیر لایه DBLlogic هم وظیفه انجام ریز عملیات مربوط به یک فرآیند را با استفاده از فراخوانی توابع موجود در لایه DBAccess انجام میده.
لایه بعدی هم که UIهست و نیاز به توضیح نداره.
علاوه بر اینا من یک لایه دیگه هم می سازم به نام Objects که توی اون یک سری Object دارم که در واقع اطلاعات لازم رو بین لایه های UI و Logic منتقل می کنه .
من تو زیر لایه DBLogic هم دسترسی به DBML دارم که با بحثایی که اینجا شد نمی دونم این دسترسی درسته یا نه.
دوستان نظر بدین.

با سلام

دوست عزیز اگه براتون ممکنه و وقتشو داشته باشید و بتونید یه برنامه کوچک با توجه به چیزی که گفتید و تو سایت قرار بدید واقعاً ممنون میشم آخه به نظر میات روش جالبی باشه

solidilos
سه شنبه 10 شهریور 1388, 22:59 عصر
برای این معماری مدلها و پیکربندی های مختلفی وجود داره، اگه تو اینترنت برای پیاده سازیهاش جستجو کنین متوجه منظورم میشین...کسی هست که رو چند تا از این مدلها کار کرده باشه؟ اگه یه مقایسه کمی و کیفی از این مدلها ارائه بده ممنون میشم.

majid325
چهارشنبه 11 شهریور 1388, 01:32 صبح
یه مدل جدید دیدم گفتم بزارم اینجا کمی در موردش کنکاش کنیم:
http://www.barnamenevis.org/forum/attachment.php?attachmentid=36300&stc=1&d=1251927164

یه توضیح (http://www.barnamenevis.org/forum/showpost.php?p=441822&postcount=3) کاملا مختصر هم راجع بهش پیدا کردم ، اگه کسی از دوستان بتونه یه توضیح کاملتر و یا حتی نمونه کدی ساده ای که این مدل رو پیاده سازی کنه قرار بده که خیلی دستش درد نکنه.

solidilos
پنج شنبه 12 شهریور 1388, 12:15 عصر
به نظرم بهتره اول یه دسته بندی از انواع پیاده سازیهای موجود انجام بشه، بعد تو یه پروژه نمونه (Case Study) مورد توافق همه پیاده سازی بشه. اونم نه کل سیستم، بلکه فقط برای یک یا دو مورد کاربرد (Use case) اصلی و مهمش تا تاثیراتش بیشتر قابل بحث و تبادل نظر باشه.

solidilos
پنج شنبه 12 شهریور 1388, 12:32 عصر
لطفا آخرین نسخه از همین پروژه رو آپلود کن majid325 عزیز...مرسی

majid325
پنج شنبه 12 شهریور 1388, 17:40 عصر
لطفا آخرین نسخه از همین پروژه رو آپلود کن majid325 عزیز...مرسی

کدوم پروژه؟
اگه منظورتون WpfApp3layer هست ، چشم تا فردا شب یه دستی به سر و روش بکشم تا قابل upload بشه .

majid325
پنج شنبه 12 شهریور 1388, 17:45 عصر
به نظرم بهتره اول یه دسته بندی از انواع پیاده سازیهای موجود انجام بشه، بعد تو یه پروژه نمونه (Case Study) مورد توافق همه پیاده سازی بشه. اونم نه کل سیستم، بلکه فقط برای یک یا دو مورد کاربرد (Use case) اصلی و مهمش تا تاثیراتش بیشتر قابل بحث و تبادل نظر باشه.

اینطور که معلومه شما تجربتون بیشتره ، میشه مسئولیت دسته بندی انواع پیاده سازی به همون روشی که گفتین بعهده بگیرین؟

solidilos
پنج شنبه 12 شهریور 1388, 18:32 عصر
اینطور که معلومه شما تجربتون بیشتره ، میشه مسئولیت دسته بندی انواع پیاده سازی به همون روشی که گفتین بعهده بگیرین؟

خواهش می کنم
من از سال 84 تا الان بصورت غیر حرفه ای پیگیر این معماری بودم اما حالا می خوام دونسته هامو جمع و جور کنم.
چیزی که خیلی مشهوده اینه که با ظهور تکنولوژیهای جدید، هر از چند گاهی شکل این معماری عوض میشه اما ساختار کلی اون تقریبا ثابت مونده. پس از یه کم بررسی که تو منابع اینترنتی کردم متوجه شدم هیچ دسته بندی خاصی از این معماری وجود نداره اما گونه های مختلفش که مناسب گونه های مختلف پروژهای سیستم های اطلاعاتی هستند توسط شرکت ها و برنامه نویس ها ارائه شده. مثلا اگه فقط تو سایت CodeProject برای مقالات مرتبط با این موضوع جستجو کنین متوجه منظورم میشین. حالا کاری که می خوام انجام بدم دسته بندی الگوهای مختلف این معمارییه (شاید لفظ الگو مناسب نباشه، منظورم همون پیاده سازی های مختلف از این معماری بود. از این به بعد برای رعایت اختصار از این لفظ استفاده می شه، اگه کسی از دوستان واژه دیگه ای رو مناسبتر دونستن اعلام کنن.)
بطوری که مشخصات کمی و کیفی هر الگو از هر لحاظ (پارامترهای تست معماری) تست و مستند بشه.

اگه کسی از دوستان نظری داره ممنون میشم اعلام کنه.

solidilos
جمعه 13 شهریور 1388, 15:56 عصر
به راستی که جوینده یابنده ست!
بالاخره تونستم اون چیزی رو که دنبالش بودم پیدا کنم، البته نه دقیقا همونو ولی خیلی به هدفم نزدیک شدم. همیشه میگن آدم درست چیزای جلو چشمشو نمی بینه...بعد از کلی منت کشیدن از Google واسه پیدا کردن یه مقاله تو این زمینه، با موتور جستجوی خود مایکروسافت اینو پیدا کردم. البته کلی فوتش کردم تا خاکش بره چون تاریخش مال 2002 هستش اما مفیده. امیدوارم به درد شما هم بخوره. این مقاله یه مقایسه کیفی از تعدادی الگوهای معماری چند لایه برای برنامه های کاربردی NET. ارائه میده. راهنمایی در مورد سناریوهای مناسب جهت استفاده از الگو، گزینه های مناسب برای پیاده سازی، مزایا و معایب استفاده از هر الگو مواردی هستن که بهشون اشاره شده.

http://msdn.microsoft.com/en-us/library/ms973829.aspx



این یکی هم قدیمیه اما به درد اونایی میخوره که دنبال کارای اصولی هستن. تو این مقاله فنی در مورد اصول و تکنیک های دستیابی به داده ها توسط ADO‎‎‎.Net بحث شده. مطمئنا سوال های زیادی رو جواب میده.

http://msdn.microsoft.com/en-us/library/ms978510.aspx

majid325
جمعه 13 شهریور 1388, 20:55 عصر
با توجه به روند تاپیک و همنظر بودن دوستان راجع به بررسی پیاده سازی های این معماری تصمیم گرفتم این پست رو با هدف مطرح شده ایجاد کنم تا اگر در ارتقای سطح علمی دوستان تاثیر گزار بود ، مطالب رو در همین راستا به صورت تخصصی تر با کمک همه پیگیری کنیم:
بررسی لایه Data Access Layer
لایه های برنامه ها مون رو به چه صورت یا الگویی باید پیاده سازی کنیم ؟
گزینه های که در لایه dal پیش رو جهت انتخاب داریم : DataSet Designer یا ADO‎‎‎‎‎‎‎.Net Entity Framework, یا ORM یا linqToSqlو یا با استفاده از اشیای ado و یا .... این کار رو انجام بدیم.(یه جا خوندم که ADO‎‎‎‎‎‎‎.Net Entity Framework یک orm هست.)
شخصا تو پروژه هام ترجیح میدم از اشیا ado استفاده میکنم و تا حالا از هیچ کدوم از مواردی که نام بردم در برنامه ها استفاده نکردم، دلایل:
ADO‎‎‎‎‎‎‎.Net Entity Framework : به عنوان یک برنامه نویس به طور ذاتی در مقابل ابزارهای که اختصاصی هست(سیاست های ماکروسافت) مقاومت نشون میدم.
DataSet Designer : هم شامل موارد بالا و هم اینکه احساس میکنم از مسائلی که باید روشون تمرکز داشته باشم قافل میشم
LinqToSql : جالب به نظر میاد ولی وقتی ماکروسافت دیگه پشتیبانیش (به هر دلیلی) نمیکنه ، ارزش هزینه کردن رو نداره.
ORM : همونطور که گفتم تا حالا استفاده نکردم (دلیل فنی و غیر فنی خاصی هم ندارم) ولی به نظرم یک از بهترین گزینه ها می باشد.
راه حل های که به ذهنم میرسه استفاده از ORM و یا همون روش سنتی یعنی اشیا ado بهترین گزینه برای انتخاب لایه dal هست ، البته در رابطه با ADO‎‎‎‎‎‎‎.Net Entity Framework نظر نمیدم چون استفاده نکردم.
برای استفاده از یک orm‌ کدوم یکی رو پیشنهاد میدین که با محیط ها و پلت فرمهای بیشتری سازگار تر هست
تو روش که من ازش به عنوان روش سنتی و استفاده از اشیا ado نام بردم ، به این صورت عمل میکنم که داده ها رو با یک command و یک Connection استخراج میکنم و خروجی توابع ام هم IDataReader هست ،پیوست مطالبی که جهت توضیح روش مذکور ارائه دادم {
یکی از دوستان اینجا (http://www.barnamenevis.org/forum/showpost.php?p=786903&postcount=103) گفته بود که خروجی توابعش از نوع IQueryable هست که به نظر من خیلی جالب اومد (نحوه پیاده سازیش (http://barnamenevis.org/forum/showpost.php?p=618594&postcount=2)) میخواستم نظر دوستان رو بدونم.
}
لطفا دوستان و اساتید نظرات خودشون رو ، تجربهای شخصی شون رو و یا ایرادات فنی و غیر فنی شون رو راجع به مطالب بالا مطرح کنند.
ضمنا به دلیل مسائل مطرح شده نمونه برنامه ای که قولشو داده بودم میمونه برای چند روز دیگه که پر محتوا تر بشه.

اگه adsl دارین این فیلم آموزشی رو با عنوان Creating an N-Tier Data Application (http://msdn.microsoft.com/en-us/library/cc178916.aspx) بررسی کنید هر چند که با dataset لایه dal رو میسازه ولی خالی از لطف نیست. در ضمن یه آشنایی نسبی با WCF هم برای دوستانی که آشناییت ندارن ایجاد میشه

solidilos
جمعه 13 شهریور 1388, 22:14 عصر
نمی دونم چرا اکثر دوستان شمشیراشونو از رو بستن و همش از سیاست های مایکروسافت اظهار نگرانی می کنن. من هیچ تعصب خاصی برای استفاده از تکنولوژی های مایکروسافت ندارم اما تنوع ابزارها، روش ها و خط مشی های این غول نرم افزاری همیشه واسم جالب بوده.
در جواب دوست عزیز لازم دونستم بگم که اگه با یه دید کلی و جامع به روند تکاملی پلتفورم دات نت و ابزارهای توسعه مایکروسافت نگاه کنیم، توجه زیاد و حرکت سریع این کمپانی رو به سمت معماری مدل گرا (MDA) میبینیم.
درسته که برای من برنامه نویس همسو و هم سرعت شدن با این روند سخته اما تکامل صنعت نرم افزار تو همین دگرگونی های سریعه. این اتفاقیه که واسه صنعت های دیگه هم افتاده. ما که بستر تولید و توانایی رقابت با همچین شرکت هایی رو نداریم، اما حداقل انرژیمونو صرف استفاده از محصولات ایده ال و بروز بکنیم. به جای اختراع دوباره چرخ و یا تردید در انتخاب یه چرخ مناسب، سعی در به حداکثر رسوندن بهره وری استفاده از این چرخ ها بکنیم، به امید روزی که بتونیم چیزی فراتر از چرخ دیگران خلق کنیم که سوار بر چرخشون باشه.

از دوستان و مدیرای عزیز خواهش می کنم بیشتر و عمیق تر تو این زمینه بحث کنن. ما که اینجا عجله ای برای بستن و خاتمه دادن به این تاپیک رو نداریم، مهم اینه که به یه نتیجه معقول برسیم.

majid325
جمعه 13 شهریور 1388, 22:53 عصر
نمیخوام این گفتگوی فنی رو به طور فلسفی جلوه داده بشه :
شخصا توی کارهای که انجام میدم همیشه دنبال راه حلی استاندارد به معنای واقعی میگشتم چون باید روزی تجربه پلاتفرمهای به حق رو تجربه کنم و این استاندارد هست که کمترین هزینه از نظر مالی و وقتی برای من فراهم میکنه، با توجه به تجربه ای که توی دات نت دارم همیشه لذت کار کردن با Ide های ماکروسافت منو دور از خلاقیت های که در موازات و حتی بیشتر مواقع جلوتر از فناوری ها و تکنولوژی های که بیشتر آنها یک کپی زیبا ماکروسافت از همین خلاقیت ها هستند نگه داشته که این بر میگرده به حقیقتی به نام حس خلاقیت طلبی و اصلا به دنبال دوباره ساختن و بیگاری نیستم ، فقط و فقط دوست ندارم زمانی که سوییچ میکنم رو پلات فرم یا محیط دیگه ای تمام تجربیات دات نت رو خاطره کنم بر فرض مثال اگه به این نتیجه برسم که از ORM ها به عنوان dal استفاده کنم میتونه یکی از گزینه ها من NHibernate باشه که این تجربه رو با خودم میتونم تو جاوا هم ببرم با این اوصاف این اظهار نگرانی از سیاست های ماکروسافت هست یا اظهار نگرانی از خاطره کردن تجربه ها؟
solidilos عزیز ما مخلصیم.
در ضمن این معماری مختص ‎.Net نیست خواهشن دوستانی که در محیط های دیگه کار میکنن هم نحوه پیاده سازی رو تو محیط مربوطه توضیح بدن ، (شاید من یکی وسوسه شدم و تغییر سکو بدم:قهقهه: )

solidilos
جمعه 13 شهریور 1388, 23:12 عصر
الانه که این پست ها رو پاک کنن.

فقط یه جواب: برای یه راننده حرفه ای فرقی نمی کنه که Ferrari برونه یا Porsche و یا ...فقط به سرعت فکر می کنه نه به طراحی واشر سر سیلندرهای موتور ماشینش و یا سیستم توربوش...اگه برنامه نویس کاربردی هستیم باید تو زمینه کاریمون خلاقیت به خرج بدیم نه تو کشف استانداردها.
(دات نت یه پیاده سازی خوب از استاندارد CLI طراحی شده بوسیله شرکت های بزرگی چون مایکروسافت، اچ پی، اینتل و ... هست با هزینه هنگفت که بیشتر از بودجه سالانه ماست...از این استاندارد تر من چیزی پیدا نکردم)

majid325
یک شنبه 15 شهریور 1388, 01:27 صبح
توی reSearch که پیرو پست 114 انجام دادم به این نتیجه رسیدم که سرعت orm ها در مقابل دیتاست و اشیا ado کمتر هست ولی هزینه نگهداری پایین اونها باعث میشه در پروژه های بزرگ و نسبتا بزرگ ازشون استفاده بشه.
با توجه ADO‎‎‎‎‎‎‎‎‎.Net Entity هم یک orm هست ،که کسی از دوستان تجربه مقایسه سرعت ADO‎‎‎‎‎‎‎‎‎.Net Entity Framework و با اشیا ado رو داره ؟

majid325
یک شنبه 15 شهریور 1388, 02:40 صبح
یکی از دوستان تو پست خصوصی از من خواسته بود یک مرجع در مورد NHibernate بهشون معرفی کنم ، گفتم اینجا بزارم شاید دوستان دیگه هم استفاده کردن:ویدئو های آموزشی (http://www.dimecasts‎‎‎‎‎.Net/Casts/ByTag/ORM)
نمیدونم چرا لینک های که میزارم مشکل دار میشه!!
میتونید با Copy و Paste آدرس در آدرس بار این مشکل رو برطرف کنید.
ببنید مشکل اینجاست که لینک اصلی به صورت زیر می باشد:
http://www.dimecasts‎‎‎‎‎.Net/Casts/ByTag/ORM
http://www.dimecasts‎‎‎‎‎.Net/Casts/ByTag/NHibernate
ولی بعد از Copy تو آدرس بار یا رجوع به لینک ، تبدیل میشه به:
http://www.dimecasts%e2%80%8e‎‎‎‎‎.Net/Casts/ByTag/ORM
http://www.dimecasts%e2%80%8e%e2%80%8e‎‎‎.Net/Casts/ByTag/NHibernate

خودتون دستی تو آدرس بار درستش کنید ، اگه کسی هم تجربه رفع این مشکل رو داره بگه منم استفاده کنم.

aynehband
چهارشنبه 18 شهریور 1388, 23:39 عصر
این هم یک منبع فارسی nhibernate برای دوستانی که زیاد زبونشون قوی نیست:
http://nhibernate.wordpress.com/

k_m
چهارشنبه 25 شهریور 1388, 02:50 صبح
سلام .
دوستان با عرض معذرت از اینکه چند وقت این بحث رو دنبال نکردم.
فکر کنم داریم از بحث اصلی این تاپیک منحرف می شیم.

روشتون جالب هست ، اگه وقتشو دارین یک نمونه قرار بدین تا هم ار تجربیاتتون استفاده کنیم و هم با روشهای که دوستان دیگه ارائه کردن مقایسه کنیم(مزایا و معایب) تا شاید بعد از یه مدت بشه یک روش جالب از ترکیب روشهای ارائه شده ایجاد کنیم.

چشم . سعی می کنم تا فردا شب یک نمونه کوچیک بذارم که روش بحث کنیم.

majid325
چهارشنبه 25 شهریور 1388, 14:44 عصر
مقایسه NHibernate وNet Entity Framework (http://gregdoesit.com/2009/08/nhibernate-vs-entity-framework-a-performance-test/)

خیلی جالب هست

محمدامین شریفی
یک شنبه 29 شهریور 1388, 22:19 عصر
بررسی لایه Data Access Layer
لایه های برنامه ها مون رو به چه صورت یا الگویی باید پیاده سازی کنیم ؟
گزینه های که در لایه dal پیش رو جهت انتخاب داریم : DataSet Designer یا ADO‎‎‎‎‎‎‎.Net Entity Framework, یا ORM یا linqToSqlو یا با استفاده از اشیای ado و یا .... این کار رو انجام بدیم.(یه جا خوندم که ADO‎‎‎‎‎‎‎.Net Entity Framework یک orm هست.)
شخصا تو پروژه هام ترجیح میدم از اشیا ado استفاده میکنم و تا حالا از هیچ کدوم از مواردی که نام بردم در برنامه ها استفاده نکردم، دلایل:
ADO‎‎‎‎‎‎‎.Net Entity Framework : به عنوان یک برنامه نویس به طور ذاتی در مقابل ابزارهای که اختصاصی هست(سیاست های ماکروسافت) مقاومت نشون میدم.
DataSet Designer : هم شامل موارد بالا و هم اینکه احساس میکنم از مسائلی که باید روشون تمرکز داشته باشم قافل میشم
LinqToSql : جالب به نظر میاد ولی وقتی ماکروسافت دیگه پشتیبانیش (به هر دلیلی) نمیکنه ، ارزش هزینه کردن رو نداره.
ORM : همونطور که گفتم تا حالا استفاده نکردم (دلیل فنی و غیر فنی خاصی هم ندارم) ولی به نظرم یک از بهترین گزینه ها می باشد.
راه حل های که به ذهنم میرسه استفاده از ORM و یا همون روش سنتی یعنی اشیا ado بهترین گزینه برای انتخاب لایه dal هست ، البته در رابطه با ADO‎‎‎‎‎‎‎.Net Entity Framework نظر نمیدم چون استفاده نکردم.
برای استفاده از یک orm‌ کدوم یکی رو پیشنهاد میدین که با محیط ها و پلت فرمهای بیشتری سازگار تر هست
تو روش که من ازش به عنوان روش سنتی و استفاده از اشیا ado نام بردم ، به این صورت عمل میکنم که داده ها رو با یک command و یک Connection استخراج میکنم و خروجی توابع ام هم IDataReader هست
....
لطفا دوستان و اساتید نظرات خودشون رو ، تجربهای شخصی شون رو و یا ایرادات فنی و غیر فنی شون رو راجع به مطالب بالا مطرح کنند.
....

چندی پیش با آقای مداح پیرامون برتری ASP.NET MVC بر ASP.NET یک بحث زیبا داشتم که بسیار از ایشان مطلب یاد گرفتم،در ادامه اگر بحث مثال های مختلف از معماری ها پیش آید و همینطور موضوع ارتباط لایه presentation با DAL مطرح شود،اطلاعات بسیار جالبی هست که خواندن آنها خالی از لطف نیست.
نتیجه بر این شد که هر تکنولوژی در جای خویش (http://www.ASP.NET/learn/mvc-videos/video-8144.aspx) نیکوست.
و اما بحث ORM ها و استفاده از تکنولوژی های رنگ و وارنگ،بحث پیرامون این موضوع هم دقیقا نتیجه بالایی را منعکس می کند.برای مثال در کد زیر از Entity Framework و Linq استفاده شده است:


MoviesDBEntities _db;
_db = new MoviesDBEntities();
var movieToUpdate = _db.MovieSet.First(m => m.Id == id);
مشاهده میکنید که چقدر زیبا Linq با Entity Framework ادغام شده است؟
اگر این تکه کد را با ADO.net و با استفاده از DataSet می نوشتیم،نیاز به حداقل چهار خط کد داشت ولی در اینجا با 17 حرف نتیجه دلخواهمان را گرفتیم.
تمام تکنولوژی هایی که در بالا نام بردید را می توان به زیبایی در کنار هم در پروژه بکار برد و نکته ای که باید ذکر شود اینکه Linq انواع مختلفی را دارد و Linq to SQL یکی از انواع آن است و هیچ مطلبی هم پیرامون پشتیبانی نکردن ماکروسافت (http://barnamenevis.org/forum/showthread.php?t=130435) هم گفته نشده است , در اکثر مثال ها و پروژه های امروزی دات نت، هم از این فناوری استفاده شده است.
در هر حال وابستگی تکنولوژی های مختلف ماکروسافت با هم،برنامه نویس دات نت را تا حدودی مجبور می سازد تا ماکروسافتی بیاندیشد.

majid325
دوشنبه 30 شهریور 1388, 10:58 صبح
نتیجه بر این شد که هر تکنولوژی در جای خویش (http://www.ASP.NET/learn/mvc-videos/video-8144.aspx) نیکوست.


من هم یکی از طرفداران این جمله هستم.


و اما بحث ORM ها و استفاده از تکنولوژی های رنگ و وارنگ،بحث پیرامون این موضوع هم دقیقا نتیجه بالایی را منعکس می کند.برای مثال در کد زیر از Entity Framework و Linq استفاده شده است:


MoviesDBEntities _db;
_db = new MoviesDBEntities();
var movieToUpdate = _db.MovieSet.First(m => m.Id == id);
مشاهده میکنید که چقدر زیبا Linq با Entity Framework ادغام شده است؟


این مسئله مختص Entity Framework نیست , linq تقریبا با همه چیز قابل ادغام شدن هست.
من چند وقتی هست دارم روی orm ها مطالعه میکنم , مقایسه ado با Entity Framework (یا هر orm ی) روال نیست.



اگر این تکه کد را با ADO.net و با استفاده از DataSet می نوشتیم،نیاز به حداقل چهار خط کد داشت ولی در اینجا با 17 حرف نتیجه دلخواهمان را گرفتیم.


البته بدون در نظر گرفتن generate Code ها.


اینکه Linq انواع مختلفی را دارد و Linq to SQL یکی از انواع آن است و هیچ مطلبی هم پیرامون پشتیبانی نکردن ماکروسافت هم گفته نشده است , در اکثر مثال ها و پروژه های امروزی دات نت، هم از این فناوری استفاده شده است.


در مورد پشتیبانی نکردن منظورم این بود که دیگه توسعه ش نمیده , که این مسئله طبیعیه.
در مورد مثال ها هم که اتفاقا برعکس.


در هر حال وابستگی تکنولوژی های مختلف ماکروسافت با هم،برنامه نویس دات نت را تا حدودی مجبور می سازد تا ماکروسافتی بیاندیشد.


مجبور !!!

kh1387
دوشنبه 30 شهریور 1388, 20:34 عصر
بسم الله الرحمن الرحیم


با سلام خدمت تمامی دوستان عزیز
تا به این مرحله همه دوستان نظرات خود رو در باره معماری چند لایه ارائه دادن . و دوست عزیزمون جناب مهندس مداح در هر مرحله نتیجه گیری کلی از بحث دوستان رو به صورت نکته وار بیان کردن . در این مرحله که نیاز به یک نمونه برنامه برای یادگیری هرچه بیشتر این معماری احساس می شد . بنده تصمیم گرفتم که با ارائه یک نمونه ای کوچک و ساده کمکی هرچند کوچک به افرادی که به تازگی با این معماری آشنا شدن کرده باشم.
با مشورتی که صورت گرفت قرار شد یک نمونه بصورت ساده ارائه شود و پس از اشکال زدایی و بهبود آن از طرف دوستان برنامه نویس ، در مراحل بعدی این نمونه ارتقاع پیدا کند و با افزودن فناوری های جدید به آن ، به یک نمونه کامل تبدیل گردد.در این نمونه کوچک تصمیم داریم با استفاده از معماری چند لایه برای مشخصات افراد یک فرم ایجاد کنیم.
دانلود N-Tier 1.0.0 (http://www.4shared.com/file/101216906/d698f63a/N-Tier_100.html)
دوست خوبم، این پروژه قابل دانلود نیست.
براتون امکان داره دوباره آپلودش کنید؟
متشکرم

kh1387
چهارشنبه 01 مهر 1388, 18:18 عصر
مث اینکه همه مهندسان خبره رفتند درگیر پروژه ای شدند.
الان هیچکس جواب نمیده!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

zoofa
جمعه 03 مهر 1388, 02:38 صبح
دانلود N-Tier 1.0.0 (http://www.4shared.com/file/101216906/d698f63a/N-Tier_100.html)


سلام دوست عزيز
مثل اينكه لينك دانلود مشكل داره
لطفاً بررسي كنيد
ممنون

eric21
یک شنبه 05 مهر 1388, 11:43 صبح
سلام..
دست همگي درد نكنه..
لينك پرو‍‍ژه 100 متاسفانه خرابه.من اين بحث رو خيلي پيگري كردم اما متاسفانه هر كدوم از دوستان شاخه به شاخه كار كردن.فيلم هاي آموزشي مايكروسافت هم متاسفانه كامل نيست .
چيزي كه مهمه اينه طبق روش هاي مايكروسافت 7 روش پياده سازي چند لايه اي وجود داره .توي سايت خودمون كه من اثري از استاندارد هاي مانند مايكروسافت نديدم.
جالب اينه كه توي همه مثال ها با استفاده از binding ديتا بيس كار كردن.و خيال خودشون راحت.
براي عمليات هاي ساده با ديتا بيس del,add,update فيلم آموزشي مايكروسافت binding داره اما اگه نخوايم كه هيچ اثري از bind باشه وكلاسي سراسري داشته باشيم براي اين موارد چه بايد كرد؟؟؟!


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

majid325
دوشنبه 06 مهر 1388, 09:10 صبح
سلام..
چيزي كه مهمه اينه طبق روش هاي مايكروسافت 7 روش پياده سازي چند لايه اي وجود داره .

میشه بیشتر توضیح بدین؟
لینک مرجع یا منبعتون هم میشه معرفی کنید؟

eric21
سه شنبه 07 مهر 1388, 10:14 صبح
میشه بیشتر توضیح بدین؟
لینک مرجع یا منبعتون هم میشه معرفی کنید؟
http://msdn.microsoft.com/en-us/library/ms973279.aspx

anubis_ir
سه شنبه 07 مهر 1388, 11:06 صبح
در مورد پشتیبانی نکردن منظورم این بود که دیگه توسعه ش نمیده , که این مسئله طبیعیه.
در دات نت فريم ورك 4 توسعه يافته و اين مطلب رد شده كه ديگر توسعه نمي‌يابد.
براي اطلاعات بيشتر به وبلاگ تيم مربوطه در سايت msdn‌ مراجعه كنيد.

majid325
سه شنبه 07 مهر 1388, 17:23 عصر
http://msdn.microsoft.com/en-us/library/ms973279.aspx

ببخشید من جایی تو لینکی که فرستاده بودید اون 7 روش رو ندیدم!!

iroonidotnet
سه شنبه 07 مهر 1388, 19:17 عصر
با سلام
بنده به دلیل مشکلاتی نتونستم ادامه بدم
لینک دانلود اصلاح شد .
فقط :
در پست 100 گفتم که این یک نمونه ساده است و باید تغییراتی روی اون انجام بشه . پس دوستان پست های بعدی رو با دقت مطالعه کنن ، چون این نمونه از یک برنامه 3 لایه واقعی خیلی دور هست . ولی برای افراد مبتدی خیلی مفید هست.

در آخر هم از همه دوستان به خاطر این تاخیر عذر می خوام .

با آرزوی موفقیت

javad_mjt
چهارشنبه 08 مهر 1388, 00:59 صبح
سلام
من پستای قبلی رو تا یه جایی خوندم
ولی اون چیزی رو که می خواستم نفهمیدم

ارتباط شی گرا با چند لایه؟؟؟
من تو تحلیلم یه سری نمودارای کلاس و بدست میارم که حالا یه سری رفتارایی یا بهتر بگم متدهایی دارن بعضی از این متدها با دیتابیس در ارتباط هستن که قاعدتا باید در لایه DAL قرار بگیرن و تو همون کلاس یه سری متدهایی دارم که با دیتابیس سر و کار ندارن و اصولا باید در BLL قرار بگیرن. حالا من این کلاس رو کجا باید قرار بدم؟؟ DAL یا BLL ؟؟

من به این نتیجه رسیدم که باید کلاسی رو که با توجه به اصول شی گرایی به دست آوردم رو به دو تا کلاس بشکنم و متداشون رو تفکیک کنم. و یکی رو تو DAL و یکی رو تو BLL استفاده کنم
که به نظرم این کار درست نباشه
ممنون میشم راهنماییم کنیین

محمدامین شریفی
چهارشنبه 08 مهر 1388, 19:05 عصر
من تو تحلیلم یه سری نمودارای کلاس و بدست میارم که حالا یه سری رفتارایی یا بهتر بگم متدهایی دارن بعضی از این متدها با دیتابیس در ارتباط هستن که قاعدتا باید در لایه DAL قرار بگیرن و تو همون کلاس یه سری متدهایی دارم که با دیتابیس سر و کار ندارن و اصولا باید در BBL قرار بگیرن. حالا من این کلاس رو کجا باید قرار بدم؟؟ DAL یا BBL ؟؟
Repository pattern

mohsen_zelzela00
سه شنبه 14 مهر 1388, 18:06 عصر
با سلام
به نظر من از بحث اصلی داریم خارج میشم

در اینجا اگه ممکنه که اساتید بزرگوار مثل آقای مهندس کرامتی ، مهندس راد و مهندس مداح و... نظر خودشون رو بگند و یک جمع بندی بکنند من و بسیاری از دوستان ممنونشان میشویم

eric21
شنبه 18 مهر 1388, 13:15 عصر
سلام
من پستای قبلی رو تا یه جایی خوندم
ولی اون چیزی رو که می خواستم نفهمیدم

ارتباط شی گرا با چند لایه؟؟؟
من تو تحلیلم یه سری نمودارای کلاس و بدست میارم که حالا یه سری رفتارایی یا بهتر بگم متدهایی دارن بعضی از این متدها با دیتابیس در ارتباط هستن که قاعدتا باید در لایه DAL قرار بگیرن و تو همون کلاس یه سری متدهایی دارم که با دیتابیس سر و کار ندارن و اصولا باید در BLL قرار بگیرن. حالا من این کلاس رو کجا باید قرار بدم؟؟ DAL یا BLL ؟؟

من به این نتیجه رسیدم که باید کلاسی رو که با توجه به اصول شی گرایی به دست آوردم رو به دو تا کلاس بشکنم و متداشون رو تفکیک کنم. و یکی رو تو DAL و یکی رو تو BLL استفاده کنم
که به نظرم این کار درست نباشه
ممنون میشم راهنماییم کنیین
دوست عزيز يه راهنمايي كوچيك اينكه آنهايي كه داراي رفتار ارتباطي با ديتا بيس هستند بنا بر ابزار هايي كه شما توي اين معماري استفاده ميكنيد يا در لايه BLL يا لايه DataService(كه از WCF استفاده مي كنه )قرار مي گيره توي برخي نمونه ها در لايه DAL قرار ميگيره ولي به صورت كلاسي كه منجر به DataManager ميشه.
آموزش Walkthrough سايت msdnجهت معماري چند لايه كمكت ميكنه.

eric21
شنبه 18 مهر 1388, 13:19 عصر
دوستان آيا نمونه پروژه ايي توي اين معماري كه با WCF كار شده باشه ولي از binding ديتا بيس استفاده نشده .
داره؟؟؟؟ ممنون مي شم كمكم كنيد.
فكر كنم خيلي مفيد باشه

yavari
چهارشنبه 25 آذر 1388, 10:35 صبح
سلام

من تمام پست های این تاپیک رو خوندم ، حیفه که این تاپیک به نتیجه نرسه .
دوستان لطف کنن ادامه بدن .

ممنون

tanha2007
جمعه 27 آذر 1388, 03:15 صبح
سلام.

من از جناب آقای علیرضا مداح (http://www.barnamenevis.org/forum/member.php?u=4649) خواهش مینمایم که این تاپیک مفید را پیگیری جدی نمایند. اگر طبق اون پست اول نتیجه گیری نمایید خیلی مفید خواهد گردید.

و از جناب آقای iroonidotnet (http://www.barnamenevis.org/forum/member.php?u=97032) عزیز نیز خواهش مینمایم که اون مثال خوب ومفیدی را که خوب توضیح دادند ادامه دهند و تغیرات که میدانند مفید است اضافه نمایند.

تشکر

علیرضا مداح
جمعه 27 آذر 1388, 11:41 صبح
سلام دوستان عزیز،
فکر می کنم در این تاپیک دوستان یک آشنایی نسبی نسبت به معماری چند لایه پیدا کردند، به دلیل اینکه بحث های این تاپیک در بعضی موارد منحرف شده است از دوستان می خواهم که نظر خود را در مورد موضوع زیر مطرح نمایند،
موافقید که یک تاپیک جداگانه ایجاد کرده و بر روی یک پروژه چند لایه از ابتدا با یکدیگر بحث کنیم؟

ali_kolahdoozan
جمعه 27 آذر 1388, 12:44 عصر
اگر بنا است به هر صورتی ادامه پیدا کند فقط سورس گذاشته شود . فقط و فقط سورس و بررسی تفاوت متدها . مگر نه دیگر ارزش نداره

majid325
شنبه 28 آذر 1388, 09:53 صبح
بله منم کاملا موافقم
دوستان برای آشنایی نسبی میتونند از این تاپیک استفاده کنند و برای موارد کامل تر از تاپیک جداگانه ای که در امتداد این تاپیک ایجاد میشه.

mamizadeh
شنبه 28 آذر 1388, 13:54 عصر
به نام خدا و با سلام خدمت دوستان
بنده حقیر یه مقاله از یک انتشارات معتبر دارم و نویسنده مقاله هم از چهره های برجسته مولفین در دنیا هستش که که تو انتشارات Wrox و APress مقاله و کتاب می نویسه یه کتاب کاربردی با قالب پیاده سازی یه فروشگاه الکترونیکی ساده بررسی کرده و در این میان به برنامه نویسی چند لایه هم کاملا و بدون نقص با استاندارد های کاملا جهانی و مورد تائید مایکروسافت پرداخته که به نظر من جای محکمی برای تکیه دادن هستش
این کتاب در کل در نج بخش بررسی شده
تحلیل پروژه در رشنال
پیاده سازی بانک اطلاعاتی در MS SQL
طراحی و پیاده سازی معماری پنج لایه با لایه ها
Presentation Layer
Business Logic Layer
Data Acess Layer
Common Objects
Operational Layer
پیاده سازی Presentation
و بخش بعدی اومده و گفته حالا بعد از پیاده سازی و اتمام کل پروژه ممکنه یه فیلدی رو از بانک کم یا زیاد کنیم به عبارت بهتر ممکنه در بانک و یا تحلیل سیستم تغییراتی رو اعمال کنیم نحوه تغییر دادن رو آموزی می ده
و در نهایت و در بخش نهایی پروژه رو اومده و بهینه سازیش کرده و گفته چیکار کنیم تا حجم پروژه پائین بیاد و سرعت سایت بالا بره
من پیشنهادم این بود که روی طریقه معماری این کتاب جلو بریم چون واقعا محشره و در بعضی از لحاظ ها من واقعا گیج زدم که چرا این کار و انجام می ده ولی وقتی از بزرگان و اساتید پرسیدم دیدم بهترم حالت رو انتخاب کرده
نام کتاب هم
Apress.Pro.ASP.NET.2.0.E.Commerce.in.C.Sharp.2005. Dec.2006.pdf
هستش
البته حجمش زیاده نتونستم آپش کنم و هاستم هم تحریم شده :شیطان: دارم از یه جای دیگه نمایندگی میگیرم واستون ارسال می کنم :چشمک:

mamizadeh
سه شنبه 01 دی 1388, 10:45 صبح
یکی از دوستان پرسیده بود که کسی ORM رو مقایسه کرده یانه من یه پروژه توپ برای مقایسه سا حالت NHibernate و Entity Framework و Linq پیدا کردم امید دارم که درد بخور باشه
البته اگه کسی چیزی برای توضیح دادن در این رابطه داشته باشه خواهش می کنم یه تاپیک جداگانه در نظر بگیرین خبرش به من برسونید با تشکر

http://www.codeproject.com/KB/architecture/ThreeTierThreeORM.aspx

tanha2007
پنج شنبه 10 دی 1388, 15:40 عصر
خیلی جای افسوس است که یک تاپیک را شروع مینمایند و بعدا در مرحله بحرانی دیگر پیگیری نمی نمایند :(

sara.f
شنبه 12 دی 1388, 15:42 عصر
با سلام

مدت زیادی بود که اسم معماری چند لایه را شنیده بودم و دنبال مطالبی می گشتم که این معماری را از اول توضیح بده و بگه که اصلا چیه و بتونم خلاصه به صورت عملی و کاربردی این روش را یاد بگیرم (البته اگر اسمش روشه!)
وقتی این تاپیک را دیدم خیلی خوشحال شدم که شخصی با سواد و مسئول مثل آقای مداح همچین تاپیکی را ایجاد کردن و با خودم گفتم بالاخره می فهمم این معماری چند لایه چیه؟!
تا چند تا پست ابتدایی هم خیلی خوب بود، ولی متاسفانه از وقتی پست های سوال و جواب های فردی پیش اومد، دیگه اون روند آموزشی و منسجم از یاد رفت و حالا هم که به انتهای این تاپیک رسیدم، فقط می تونم بگم گیج تر از قبل شدم و خیلی ناراحتم که آخرش نفهمیدم چی شد؟
فقط به این نتیجه رسیدم که معماری چند لایه سخت تر از اون چیزیه که دیگران می گفتند و در تصورم بود و بهتره که در پروژه ای که می خواستم انجام بدم ازش استفاده نکنم.
خیلی ناراحت کننده است.

m.hamidreza
شنبه 12 دی 1388, 22:26 عصر
من پیشنهادم این بود که روی طریقه معماری این کتاب جلو بریم چون واقعا محشره

اون کتاب از Application Block و Dataset استفاده کرده. اگه دنبال منبع هستید پروژه ی BeerHouse سایت ASP.NET نمونه ی بهتر و کامل تری از معماری سه لایه رو پیشنهاد میکنه.
پروژه گریدویوی برادر بهروز راد هم شیوه ی استاندارد و خوبی هست و از Generic ها استفاده میکنه و پروژه کاملا ملموس و سلیس هست.


فقط می تونم بگم گیج تر از قبل شدم و خیلی ناراحتم که آخرش نفهمیدم چی شد؟
فقط به این نتیجه رسیدم که معماری چند لایه سخت تر از اون چیزیه که دیگران می گفتند و در تصورم بود و بهتره که در پروژه ای که می خواستم انجام بدم ازش استفاده نکنم.
خیلی ناراحت کننده است.

اصلا اینجوری نیست کلیات تاپیک واقعا مفید هست. مهم اینه که به شما سرنخ هایی رو درباره معماری سه لایه بده که میده. دیگه تحقیق و پژوهش با شماست.... مطالبی که در این تاپیک بحث شد رو شما در نمونه سایت های انگلیسی هم نمیتونی پیدا کنی چه برسه به فارسی!!
موفق باشید.

*unos*
شنبه 10 بهمن 1388, 10:11 صبح
موافقید که یک تاپیک جداگانه ایجاد کرده و بر روی یک پروژه چند لایه از ابتدا با یکدیگر بحث کنیم؟

خیلی خوبه
با یه پروژه چند لایه خیلی از سوالات دوستان و البته خودم پاسخ داده میشه
خدا خیرتون بده زودتر شروع کنید

sedehi
شنبه 24 بهمن 1388, 12:34 عصر
با سلام خدمت همگی دوستان
من فکر میکنم این بحث کاملا بصورت جسته و گریخته داره پیش میره و اینجوری به نتیجه نمی رسه
پیشنهاد میکنم یه تاپیک جدید ایجاد بشه و از ابتدا بصورت کلاسیک و منظم از مسائل مبنایی شروع کنیم تا بصورت دسته بندی شده و فصل به فصل تاپیک هدایت بشه . به نظر میرسه مدیران محترم باید تلاش بیشتری در هدایت بحث داشته باشند .
با تشکر از همه

zoofa
شنبه 24 بهمن 1388, 17:08 عصر
سلام دوستان عزیز،
فکر می کنم در این تاپیک دوستان یک آشنایی نسبی نسبت به معماری چند لایه پیدا کردند، به دلیل اینکه بحث های این تاپیک در بعضی موارد منحرف شده است از دوستان می خواهم که نظر خود را در مورد موضوع زیر مطرح نمایند،
موافقید که یک تاپیک جداگانه ایجاد کرده و بر روی یک پروژه چند لایه از ابتدا با یکدیگر بحث کنیم؟

با سلام
حدود 2 ماه است که این پست رو دادید و اکثر دوستان هم با تشکر و با زدن پست موافقت کردند که یه تاپیک جدید ایجاد بشه.

اگه ممکنه زودتر تاپیک جدید رو راه اندازی کنید تا ما تازه کار ها هم یه چیزی یاد بگیریم.
ممنون
ببخشید که در کارتون دخالت کردم

behrouzlo
دوشنبه 26 بهمن 1388, 19:26 عصر
دوستان چرا به كتاب Software Architecture and Design مراجعه نمي كنيد كه توسط خود مايكروسافت چاپ شده است و البته ويرايش دوم آن هم چند ماه قبل ارائه شد كه به صورت رايگان هم قابل دانلود است

m.hamidreza
دوشنبه 26 بهمن 1388, 20:27 عصر
دوستان چرا به كتاب Software Architecture and Design مراجعه نمي كنيد كه توسط خود مايكروسافت چاپ شده است و البته ويرايش دوم آن هم چند ماه قبل ارائه شد كه به صورت رايگان هم قابل دانلود است

اگه منظور شما Application Architecture Guide 2.0 هست که pattern & practice هم هست و مربوط به سال 2008 هست باید بگم که به نظر من فقط کلی گویی کرده؛ کاملا تئوری معنی چهارتا عبارت رو گفته و واسه خودش داستان تعریف کرده. اصلا کاربردی نیست. پست های این تاپیک کاملا عملیاتی و در دنیای واقعی به بررسی این معماری پرداخته.
اگه کتاب دیگه ای مد نظرت هست بگو ما هم بخونیم.
ممنون.

mf_007
شنبه 22 اسفند 1388, 20:00 عصر
تو برنامه هاي ساده مثل برنامه هاي بانك اطلاعاتي كه فقط در يك سيستم اجرا مي شه هم لازمه كه از معماري چند لايه استفاده بشه؟

pirmard
پنج شنبه 19 فروردین 1389, 22:53 عصر
سوال : قسمت های مربوط به مدیریت add-on ها در کدام لایه قرار می گیرند ؟ چرا ؟

cool_programmer
سه شنبه 04 خرداد 1389, 10:25 صبح
دوستان سلام

مطالب رو که خوندم دیدم خیلی چیز ها رو داریم اشتباه می گیم و مسیر رو اشتباه می ریم. درسته چند لایه رو میشه به روش های مختلف پیاده کرد. مثلاً بهتره از پاترنه Facade استفاده بشه، ولی خب میشه استفاده هم نکرد. ولی خب روش باید درست باشه.

من لینک یه پروژه عملی پیاده شده با .Net 4 رو براتون میزارم که توی مستنداتش هم خوب توضیح میده:
http://www.asp.net/web-forms/samples/tailspin-spyworks

سه فایل ویدیو هم تو این آدرس براش گذاشته:
http://www.asp.net/web-forms/fundamentals

اوبالیت به بو
چهارشنبه 05 خرداد 1389, 10:58 صبح
اسلاید مربوط به درس شیوه ارائه مطلب تو دانشگاه هست که من یه جمع بندی کوتاه راجع به قسمت 1 و 2 تایپیک رو انجام دادم.

saeedalg
دوشنبه 29 شهریور 1389, 08:56 صبح
برای دیدن یه مثال عملیاتی از الگوی MVP و بسیاری از الگوهای دیگه خوبه که این (http://www.microsoft.com/downloads/en/details.aspx?FamilyId=6DD3D0C1-D5B4-453B-B827-98E162E1BD8D&displaylang=en) رو ببینید. خوب چیزی که هست، یه مقدار مطالبش سنگینه، یعنی اگر یه توسعه دهنده تازه کار یا متوسط هستید و تا 1 هفته زیاد چیزی نفهمیدید به تلاشتون ادامه بدید مطمئنا لذت میبرید، همین برای Win App هم به اسم CAB وجود داره، فقط مستنداتش رو بخشهاییش رو ببینید کلی سیستم دستتون میاد.

برای MVC هم خوبه که MVC Music Store رو ببینید. با توجه به اینکه مایکروسافت از 2011 دیگه کلا میره رو MVC ASP با MVC ASP هم آشنا میشید (اگه آشنا نیستید).

برای اتصال به DB بستگی به پروژه داره یه وقت با NHibernate یه وقتم با Entity Framework یه وقتم یه DAL ساده، فعلا Entity Framework واسه RAD خیلی خوب جواب میده.

در واقع شما با مطالعه این مطالب معماری چند لایه رو تا حدود خوبی (بیشتر از مطالبی که تو این تاپیکا تا حالا بوده) درک میکنید و دیدتون تغییر پیدا میکنه.

davoodrm666_666
چهارشنبه 31 شهریور 1389, 20:22 عصر
دوستان کسی با فریم ورک PLinqO برای ایجاد DAL کارکرده آیا برای پروژه بزرگ میشه بهش اعتماد کرد؟

sedehi
جمعه 09 مهر 1389, 13:57 عصر
به نظرم این تاپیک کاملا فراموش شده

sedehi
جمعه 09 مهر 1389, 14:08 عصر
به نام خدا و با سلام خدمت دوستان
بنده حقیر یه مقاله از یک انتشارات معتبر دارم و نویسنده مقاله هم از چهره های برجسته مولفین در دنیا هستش که که تو انتشارات Wrox و APress مقاله و کتاب می نویسه یه کتاب کاربردی با قالب پیاده سازی یه فروشگاه الکترونیکی ساده بررسی کرده و در این میان به برنامه نویسی چند لایه هم کاملا و بدون نقص با استاندارد های کاملا جهانی و مورد تائید مایکروسافت پرداخته که به نظر من جای محکمی برای تکیه دادن هستش
این کتاب در کل در نج بخش بررسی شده
تحلیل پروژه در رشنال
پیاده سازی بانک اطلاعاتی در MS SQL
طراحی و پیاده سازی معماری پنج لایه با لایه ها
Presentation Layer
Business Logic Layer
Data Acess Layer
Common Objects
Operational Layer
پیاده سازی Presentation
و بخش بعدی اومده و گفته حالا بعد از پیاده سازی و اتمام کل پروژه ممکنه یه فیلدی رو از بانک کم یا زیاد کنیم به عبارت بهتر ممکنه در بانک و یا تحلیل سیستم تغییراتی رو اعمال کنیم نحوه تغییر دادن رو آموزی می ده
و در نهایت و در بخش نهایی پروژه رو اومده و بهینه سازیش کرده و گفته چیکار کنیم تا حجم پروژه پائین بیاد و سرعت سایت بالا بره
من پیشنهادم این بود که روی طریقه معماری این کتاب جلو بریم چون واقعا محشره و در بعضی از لحاظ ها من واقعا گیج زدم که چرا این کار و انجام می ده ولی وقتی از بزرگان و اساتید پرسیدم دیدم بهترم حالت رو انتخاب کرده
نام کتاب هم
Apress.Pro.ASP.NET.2.0.E.Commerce.in.C.Sharp.2005. Dec.2006.pdf
هستش
البته حجمش زیاده نتونستم آپش کنم و هاستم هم تحریم شده :شیطان: دارم از یه جای دیگه نمایندگی میگیرم واستون ارسال می کنم :چشمک:



میشه لینک دانلود را بذارین

mohsen-sh
دوشنبه 26 مهر 1389, 22:56 عصر
سلام دوستان من در مورد روش DDD مثال خاصی تو انجمن ندیدم
لطفا در این مورد بیشتر مثال و توضیح بدین
ممنون

saraafshar08
چهارشنبه 03 آبان 1396, 14:49 عصر
استفاده از معماری چند لایه، برنامه نویسی رو شی گراتر، کد نویسی رو کمتر، اشکال زدایی رو راحتتر و قابلیت استفاده مجدد کد رو فراهم میکنه و به روند تولید نرم افزار سرعت میده.