PDA

View Full Version : انتقال پیام در برنامه های چند لایه



مهدی هادیان2
یک شنبه 12 آذر 1391, 11:27 صبح
بسم الله الرحمن الرحيم
با سلام
معمولا در کلاس ها در پروژه هاي چند لايه چگونه پيغام ها رو کنترل ميکنند؛ از چه نوعي ميگيرند و با اون پيغام مورد نظر رو به لايه بالايي ميفرستند.
اگه با مثال باشه خیلی ممنون میشم.
با سپاس فراوان

ali_habibi1384
دوشنبه 13 آذر 1391, 04:40 صبح
بسم الله الرحمن الرحيم
با سلام
معمولا در کلاس ها در پروژه هاي چند لايه چگونه پيغام ها رو کنترل ميکنند؛ از چه نوعي ميگيرند و با اون پيغام مورد نظر رو به لايه بالايي ميفرستند.
اگه با مثال باشه خیلی ممنون میشم.
با سپاس فراوان
اگر منظورت از پيغامها نتيجه عملكرد يك تابع از يك كلاس هست كه خروجي اون تابع ميشه جواب شوال شما در غير اينصورت جوابتونو واضحتر بپرسيد.

مهدی هادیان2
دوشنبه 13 آذر 1391, 09:01 صبح
بسم الله الرحمن الرحیم
با سلام
منظورم اینه که فرض کنید لایه UI متد DELETE رو از لایه BL فراخوانی می کنه. در لایه BL عملیات مورد نظر یا با موفقیت انجام می شود و یا با موفقیت انجام نمی شود (مثلا در هنگام دسترسی به AL اتصال به بانک صورت نمی گیرد)
باید به لایه UI اطلاع دهد چه اتفاقی افتاده است. با چه مکانیسمی این کار را انجام میدهد؟
اگه شما یه نمونه از برنامه هاتون رو بذارید بهتر می تونم مسئله رو مطرح کنم.
با تشکر

ali_habibi1384
دوشنبه 13 آذر 1391, 11:09 صبح
بسم الله الرحمن الرحیم
با سلام
منظورم اینه که فرض کنید لایه UI متد DELETE رو از لایه BL فراخوانی می کنه. در لایه BL عملیات مورد نظر یا با موفقیت انجام می شود و یا با موفقیت انجام نمی شود (مثلا در هنگام دسترسی به AL اتصال به بانک صورت نمی گیرد)
باید به لایه UI اطلاع دهد چه اتفاقی افتاده است. با چه مکانیسمی این کار را انجام میدهد؟
اگه شما یه نمونه از برنامه هاتون رو بذارید بهتر می تونم مسئله رو مطرح کنم.
با تشکر
خب منم دقيقا همينو جواب دادم:
با استفاده از خروجي تابع . مثلا اگر عمل delete انجام بشه تعداد سطرهاي پاك شده رو به لايه UI برميگيردونيد .پر واضح است كه اگر كمتر از مقدار مورد انتظار بود خطا صورت گرفته است.

مهدی هادیان2
دوشنبه 13 آذر 1391, 13:17 عصر
خب منم دقيقا همينو جواب دادم:
با استفاده از خروجي تابع . مثلا اگر عمل delete انجام بشه تعداد سطرهاي پاك شده رو به لايه UI برميگيردونيد .پر واضح است كه اگر كمتر از مقدار مورد انتظار بود خطا صورت گرفته است.
با سلام
بله خطا صورت گرفته ولی مشخص نمی شود چه خطایی صورت گرفته است.

hamid.karimy
دوشنبه 13 آذر 1391, 13:29 عصر
ببینید از لایه پایینتر مثلا DataAccessLayer خطا رو پرتاب می کنیم به بالا

try
{
}
catch (Exception ex)
{


thrownewException(ex.Message,ex.InnerException);}
همینطور در لایه BLL تا به UI برسه که اونجا نمایش میدیم
در رابطه با جواب متد مثلا Delete معمولا جواب متد به صورت int هست که میتونیم با همین روش در لایه ها حرکت کنیم

مهدی هادیان2
دوشنبه 13 آذر 1391, 20:27 عصر
ببینید از لایه پایینتر مثلا DataAccessLayer خطا رو پرتاب می کنیم به بالا

try
{
}
catch (Exception ex)
{



thrownewException(ex.Message,ex.InnerException);}

همینطور در لایه BLL تا به UI برسه که اونجا نمایش میدیم
در رابطه با جواب متد مثلا Delete معمولا جواب متد به صورت int هست که میتونیم با همین روش در لایه ها حرکت کنیم

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

Kubuntu
دوشنبه 13 آذر 1391, 22:59 عصر
سلام
لایه ها بصورت زیر باهم در ارتباطند. یعنی interface از facade استفاده می کند و به آخر. اما این وسط یه قانون نباید فراموش بشه " هرگز در سیستم چندلایه، لایه پایین نباید بالایی رو صدا بزنه چون اگه لایه بال رو تغییر بدیم به ناچار باید پایینی رو هم عوض کنیم!"

95979
توضیح لایه ها:
لایه interface همون پروژه windows form application است که شامل فرمهای برنامه است.
در لایه facade متدهایی که قرار است پشت فرمها نوشته شود را بصورت کلاس در این لایه قرار می دهیم درنتیجه پشت فرمها کدی به اون صورت دیده نمی شود.
لایه business هم کارهای پردازشی رو انجام می ده.
در data access هم ado.net رو پیاده سازی می کنیم.
لایه common شامل کلاسهای مشترک بین این 4 لایه فوق است.

حالا اگه شما بتونید تعاریف بالا رو رعایت کنید به مشکل برنمی خورید. مثلا وقتی facade اطلاعات از business میگیره قطعا facade وقتی جواب رو میگیره باید بدونه ج در محدوده فلان بود فلان کارو بکن و به همین ترتیب ...

راجع به نمونه کار + توضیح بیشتر هم که تو نت پره ماشالا

موفق باشید