sasansara
شنبه 01 بهمن 1390, 11:47 صبح
اعتبار سنجی (validation) صحیح منطق تجاری (business) برنامه ، در معماری چند لایه کجا باید انجام بشه؟
مثلا من می خوام موجودیت e رو درج کنم ، تابع زیر رو باید در UI فراخوانی کنم:
e.Add();
فرض کنید دو تا اعتبار سنجی هم قبلش نیازه:
1- این موجودیت قبلا وجود داشته؟ e.Exist();
2- تاریخ درج صحیح است؟ e.DateIsValid();
سئوال: به نظر شما این اعتبارسنجی ها چطور باید فراخوانی بشه؟ من دو راه به ذهنم می رسه:
1- در UI این دو تا اعتبار سنجی فراخوانی بشه. اگه پیغامی برگشت داده شد به کاربر نمایش داده بشه و اگه داده معتبر بود تابع Add فراخوانی بشه.
if(e.exist())
{//....}
else if( e.DateIsValid())
{e.Add();}
else {//...}
مشکل : UI باید بدونه که این اعتبار سنجی ها باید انجام بشه و قبل از هر Add اونها رو فراخوانی کنه .
2- اعتبار سنجی ها داخل خود تابع Add فراخوانی بشه و UI فقط Add رو فراخوانی کنه و اگه پیغامی برگشت داده شد اون رو به کاربر نمایش بده.
مشکل: UI چطور بفهمه عمل درج مجاز بوده و انجام شده یا نه. اگه تابعی نیاز داشته باشه نتیجه ای رو برگردونه، پیغام های اعتبارسنجی چطور به UI برگردونده بشه.
مثلا من می خوام موجودیت e رو درج کنم ، تابع زیر رو باید در UI فراخوانی کنم:
e.Add();
فرض کنید دو تا اعتبار سنجی هم قبلش نیازه:
1- این موجودیت قبلا وجود داشته؟ e.Exist();
2- تاریخ درج صحیح است؟ e.DateIsValid();
سئوال: به نظر شما این اعتبارسنجی ها چطور باید فراخوانی بشه؟ من دو راه به ذهنم می رسه:
1- در UI این دو تا اعتبار سنجی فراخوانی بشه. اگه پیغامی برگشت داده شد به کاربر نمایش داده بشه و اگه داده معتبر بود تابع Add فراخوانی بشه.
if(e.exist())
{//....}
else if( e.DateIsValid())
{e.Add();}
else {//...}
مشکل : UI باید بدونه که این اعتبار سنجی ها باید انجام بشه و قبل از هر Add اونها رو فراخوانی کنه .
2- اعتبار سنجی ها داخل خود تابع Add فراخوانی بشه و UI فقط Add رو فراخوانی کنه و اگه پیغامی برگشت داده شد اون رو به کاربر نمایش بده.
مشکل: UI چطور بفهمه عمل درج مجاز بوده و انجام شده یا نه. اگه تابعی نیاز داشته باشه نتیجه ای رو برگردونه، پیغام های اعتبارسنجی چطور به UI برگردونده بشه.