PDA

View Full Version : مشکل با برنامه نویسی چند لایه



mohsen_metn
یک شنبه 16 آبان 1389, 15:39 عصر
سلام
راستش چند روزیه که به یک مشکل برخوردم هرچی سرچ کردم نتیجه ای نداشت
در برنامه نویسی چهد لایه چطوری میشه از لایه های bll و dal به فایل های لایه Presentation Layer دسترسی داشت.
مثلا مقادیر یک فایل txt را خواند یا تغییر داد و یا یک فایل xml ایجاد کرد؟

ایمان مدائنی
یک شنبه 16 آبان 1389, 15:50 عصر
برات يك نمونه از برنامه نويسي سه لايه گذاشتم
اميدوارم كارتو راه بندازه

vcldeveloper
یک شنبه 16 آبان 1389, 18:54 عصر
در برنامه نویسی چهد لایه چطوری میشه از لایه های bll و dal به فایل های لایه Presentation Layer دسترسی داشت.هدفتون از توسعه اون برنامه به صورت چند لایه چی هست؟ اگر قراره که لایه های Business Logic یا Data Access تون به Presentation Layer دسترسی داشته باشند، دیگه چرا اصلا دارید چند لایه کار می کنید؟! Presentation Layer شما باید به لایه های BL و DA وابسته باشه، نه اینکه اونها به این لایه وابسته باشند.



مثلا مقادیر یک فایل txt را خواند یا تغییر داد و یا یک فایل xml ایجاد کرد؟خواندن یک فایل یا ایجاد یک فایل XML چه ارتباطی به Presentation Layer داره؟ اگر بر فرض کاربر شما نیاز داشته باشه که یک فایل XML از برخی داده ها تولید کنه، این درخواست رو از طریق Presentation Layer یا Controller ایی که وظیفه دریافت ورودی رو داره به DAL ارسال میکنه، و DAL سند XML مربوطه رو تولید میکنه، و به Presentation Layer ارسال میکنه.

این توصیه رو از من داشته باشید؛ تا زمانی که با مفاهیم اولیه، و نقاط ضعف و قوت، و کاربردهای طراحی نرم افزار به صورت چند لایه کاملا آشنا نشدید، سراغ این مدل طراحی نرید. چون معمولا نتیجه اش میشه کار بسیار زیاد برای برنامه ایی که اکثر قابلیت های یک نرم افزار چند لایه رو نداره!
همین توصیه رو برای نوشتن برنامه های Multi-threaded هم می کنم؛ تا زمانی که واقعا با مفاهیم Multi-threading آشنا نشدید، به صرف شنیدن از این و آن، و توصیه هایی که برای فلان کار باید از Thread استفاده کنی، و امثال اون؛ زیر بار سر و کله زدن با Threadها نرید. چون اینها مثل تیغ دو لبه هستند، اگر ندونید که واقعا چی هستند و چطور کار می کنند، انگشت خودتون رو قطع می کنید.

amir-yeketaz
یک شنبه 16 آبان 1389, 21:09 عصر
این توصیه رو از من داشته باشید؛ تا زمانی که با مفاهیم اولیه، و نقاط ضعف و قوت، و کاربردهای طراحی نرم افزار به صورت چند لایه کاملا آشنا نشدید، سراغ این مدل طراحی نرید.
ببخشید استاد ... میشه بگین این مفاهیم اولیه چی هستن ؟؟؟؟

vcldeveloper
دوشنبه 17 آبان 1389, 00:07 صبح
میشه بگین این مفاهیم اولیه چی هستن ؟؟؟؟ ببینید در هر کاری، فرد باید هدفش رو مشخص کنه، که میخواید با انجام این کار به چی برسه؟ در معماری چند لایه هم فرد باید مشخص کنه که چرا میخواد از این معماری استفاده کنه؟ برای اینکه متوجه بشه چرا باید از معماری استفاده کنه، باید درباره اش اطلاعات کافی کسب کنه. حداقلش باید متوجه بشه که مزایا و معایب این نوع معماری چی هست. اون وقت میتونه مزایا رو بسنجه، و ببینه آیا ارزش داره که از اون معماری استفاده کنه، یا نه.
معماری سه لایه یا چند لایه راه حلی برای همه مشکلات نیست، معایب خاص خودش رو داره، مثلا عمده ترین مشکلش اینه که پیچیدگی برنامه رو به شدت افزایش میده. افزایش پیچیدگی برنامه هم یعنی افزایش زمان و هزینه لازم برای به پایان رسوندن برنامه، و افزایش هزینه های نگهداری اون برنامه.

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

این دوستمون اگر بخواد از لایه DA به Presentation دسترسی پیدا کنه، هم پیچیدگی این لایه ها رو افزایش داده، هم اونها رو به هم وابسته کرده. فردا اگر بخواید در Presentation یک تغییری بده، باید بره در DA هم تغییر اعمال کنه. در DA تغییر اعمال کنه، باید حواسش باشه که لایه های دیگه ایی مثل BL و غیره هم ممکنه وابسته به DA باشند، و اونها هم نیاز به تغییر داشته باشند. قرار بود ایشون با معماری چند لایه از این مشکلات پیشگیری کنه، اگر نکرد، اون وقت این سوال پیش میاد که اصلا چرا رفته سراغ معمای چند لایه؟!

درباره Threading هم بحث زیاد هست، خیلی ها این روزها با توجه به داغ بودن بحث Threading و آسان شدن کار کردن با Threadها، سریع میرند برنامه خودشان را Multi-threaded می کنند. در حالی که از هر فرد با تجربه و صاحب دانش کافی در این حوزه بپرسید، بهتون میگه که Multi-thread کردن یک برنامه پیچیدگی اون برنامه رو فوق العاده بالا میبره، و دیباگ کد را بسیار سخت میکنه. برای نوشتن برنامه Multi-threaded برنامه نویس باید دید خودش را نسبت به اجرای کد در برنامه تغییر بده، و حتما با اصول اولیه ایی مثل Synchronization در Threadها، چگونگی تقسیم کار بین اونها، چگونگی اجرای همزمان Threadها، یک آشنایی نسبی داشته باشه. حالا ممکنه ابزارها و کتابخانه هایی هم بیان که برنامه نویس رو از درگیر شدن با بسیاری از جزئیات بی نیاز کنند، ولی برنامه نویس باید یک حداقل اطلاعاتی درباره مفهوم Thread و اجرای آن داشته باشه تا بتونه از اون ابزارها استفاده کنه. وقتی نداره، هم خودش را گرفتار میکنه، هم کاربر محصولش را. شما در همین تالارهای دات نت ببینید که چقدر راحت به یکی توصیه میشه که بره از Background Thread استفاده کنه، وقتی هم که جایی گیر میکنه، مثلا میخواد وضعیت یک کنترل رابط کاربر را تغییر بده، و خطا میگیره، چقدر راحت یک عده میان بهش میگن که چطور اون خطا رو خفه کنه! بجای اینکه بهش بگن اصلا نباید به اون شکل وضعیت اون کنترل رو در اون Thread تغییر میداده.

اینها متاسفانه هست، و در قشر برنامه نویس، حالا به طور خاص تر، در برنامه نویسان کشور خودمون، بعضی Buzz word ها هستند، که خیلی ها رو جذب می کنند، بدون اینکه اصلا مشخص باشه که اون تکنولوژی یا ابزار یا معماری خاص اصلا به درد اون فرد یا گروه یا شرکت میخوره یا نه؛ یکیش همین معماری چند لایه هست، یکیش MVC هست، یکیش RUP هست، و موارد دیگه. طرف بدون توجه به مزایا و معایب شون، همینطوری میاد از اینها استفاده میکنه، مثلا میبینه MVC الان زیاد سر زبون ها ست، میگه از MVC استفاده کنیم، کلاس داره! آخه این MVC مزایا داره، اما معایب هم داره، نمیشه که آدم بدون بررسی مزایا و معایبش، همینطوری بره سراغش، خودش رو بیاندازه توی چاله. RUP هم همین طور، سایر موارد هم همینطور. اینها هر کدوم برای پاسخگویی به یک سری نیازهای خاص بوجود اومدند، به خودی خود که یک پروژه رو موفق نمیکنند.

از این بحث ها زیاده و حالا حالاها تموم نمیشه، من هم خیلی زیاد نوشتم.

موفق باشید

mohsen_metn
دوشنبه 17 آبان 1389, 16:55 عصر
با تشکر از همه دوستانی که جواب دادند
شاید مشکل از من بود که نتونستم درست سوالاتم رو مطرح کنم. در واقع من دارم روی یک برنامه تحت شبکه کار می کنم که در هر محیطی کانکشن استرینگ اون فرق میکنه.
هدف من این بود که بتونم اطلاعات کانکشن استرینگ رو در یک فایل متنی ذخیره کنم و بعدا بتونم در لایه dal از اون استفاده کنم