تبليغاتX
پویا بلاگ
 خطاي ناشي از طراحي

Factoring:

The process of determining what properties and method belong on an Interface

در صورت عدم اجراي صحيح اين عمليات مطمئنا دچار مشكلات بسياري مي شويد كه طراحي و ساختار برنامه تان را دچار مشكلات پنهاني مي كند كه در زماني كه اصلا انتطارش را نداريد خودش را نشان مي دهد اتفاقي كه اخیرا براي تيم ما رخ داد.
در شركت ما يك
Framework براي توليد محصولات وجود دارد كه اخيرا براي افزاريش كارايي-كاهش حافظه مصرفي و افزايش سرعت اجرا - تغييراتي در بخش Plug-in Interface آن انجام شد.نسخه بهينه شده با مجموعه اي از تغييرات ديگر نهاییشد،به همين منظور تيمهاي توسعه نسبت به اعمال تغييرات در سيستم خود اقدام كردند،تا اينجا همه چيز خوب بود تا اينكه هنگام تست سيستمها مشخص شد يكي از plug-in ها هنگامي كه در Shell بار گزاري مي شود درست رفتار نمي كند ،بعد از مدتي بررسي به نكته بسيار جالبي رسيديم ،محل خطا پيدا شد،از آنجا كه محيط توسعه ما .Net است يكي از اعضا تيم توسعه آن Plug-in  براي پياده سازي فاصل Iplugin جديد از فشردن دكمه هايF10 Alt+Shift+ استفاده كرده بود،مطمئنا مي دانيد كه .Net با اين كار تمام متدهاي فاصل را با كدي درون آن كه يك Exception  به بالا پرتاب مي كند ميسازد،دوست توسعه دهنده ما هم متدهايي را كه نياز داشته پياده سازي كرده يك متد را كه مجموعه اي خاص از Command ها را براي نمايش در منوهاي پيش فرض Shell فرا هم مي كرده باز نويسي نكرده در واقع حتي خط پرتاب كننده Exception  را هم پاك نكرده است،چرا كه اصلا به آن نيازي نداشته كه بخواهد به آن متد هم فكر مي كرده چه رسد به اصلاح آن و نتيجتا هنگامي كه shell از اين plugin مي خواسته آن متد را اجرا كند خطايي رخ ميداده است.
 اين خطا ناشي از آن بود كه رفتاري به يك
Plugin  داده شده بود كه در ذات plugin هاي ما نبود و بايد آن رفتار به يك فاصل ديگر داده ميشد. تا هر كس آن را خواست پياده سازي كند.
يعني در عمليات
factoring صورت گرفته براي آن فاصل متدي اشتباه به آن اختصاص داده شده بود.متدي كه به آن تعلق نداشته است.

كدي كه منشا خطا شده بود و خود حاصل طراحي اشتباه:

Ipugin

{

 Some Methode….

      List GetExtraComamndsForShellDefualtMenu();

}

و راه حل صحيح تر:

IPlugin

{

 Some Methode….

}

 

IExtraShellCommandProvider

{

        List GetExtraComamndsForShellDefualtMenu();

}

نكته آن است كه يك طراحي خوب و صحيح مي توان مانع از بخشي از خطاهاي محتمل در توسعه سيستم باشد  اين يك احتمال بدون قظعيت است ولي عكس اين قضيه يك غالب

|+| نوشته شده توسط پویا در شنبه نوزدهم مرداد 1387 و ساعت 20:30