شماره تماس 09336863931 | 09178169907 پست الکترونیک provid.ir@gmail.com

آموزش اصل Inversion of Control در برنامه نویسی #9

آموزش اصل Inversion of Control در برنامه نویسی #9 را در این قسمت از وبسایت آموزش برنامه نویسی پرووید دانلود کنید.

در مثال بالا دو کلاس CustomerBusinessLogic و DataAccess با هم Tight Coupling (در هم تنیدگی سخت) دارند چرا که CustomerBusinessLogic شامل یک رفرنس به کلاس DataAccess است. به عبارت دیگر یک شی از کلاس DataAccess در درون CustomerBusinessLogic تعریف شده و چرخه حیات (Lifetime) آن توسط این کلاس مدیریت می شود.

مشکلات مربوط به این نوع طراحی از قرار زیر می باشند:

  • کلاسهای CustomerBusinessLogic و DataAccess با هم Tight Coupling دارند. بنابراین تغییرات در کلاس DataAccess منجر به تغییرات در کلاس CustomerBusinessLogic می شود. برای مثال اگر ما یک متد در DataAccess را حذف و یا اضافه کنیم یا حتی تغییر نام دهیم نیازمند تغییر دادن کد های CustomerBusinessLogic که از این متد استفاده می کنند نیز هستیم.
  • فرض کنید که در آینده امکان دارد داده های مربوط به CustomerBusinessLogic از دیتابیس ها یا وب سرویس های مختلفی وارد برنامه شوند. برای مدیریت کردن چنین شرایطی نیاز به ساخت کلاس های DataAccess دیگر داریم تا بتوانیم داده ها را از منابع مختلف دریافت کنیم. این تغییرات نیز منجر به ایجاد تغییراتی در CustomerBusinessLogic نیز می شوند.
  • همانطور که می دانید کلاس CustomerBusinessLogic یک شی از کلاس DataAccess را با استفاده از کلمه کلیدی new در درون خود ایجاد می‌کند. ممکن است کلاس های متفاوتی در برنامه ما وجود داشته باشند که از کلاس DataAccess استفاده کنند و از آن یک شی بسازند. بنابراین اگر نام کلاس DataAccess در آینده تغییر کند باید تمامی مکان هایی که یک شی از این کلاس ساخته شده است را پیدا کرده و این تغییرات را در آنجا اعمال کنیم.
  • از آنجایی که کلاس CustomerBusinessLogic یک شی از کلاس DataAccess (دقت کنید که DataAccess یک کلاس Concrete است نه یک کلاس Abstract یا اینترفیس) را در درون خود ایجاد کرده است نمی‌تواند به طور مستقل در Test Driven Development استفاده شود. به عبارت دیگر CustomerBusinessLogic نمی تواند با کلاس‌های Mock جایگزین شود. اگر در این رابطه اطلاعات بیشتری می خواهید توصیه می‌کنیم حتماً از بسته های آموزش وب سایت پرووید در رابطه با Test Driven Development و Unit Testing استفاده کنید.

بسته ی جامع آموزش Inversion of Control و IoC Container ها

از شما دعوت می کنیم که از بسته ی جامع آموزش Inversion of Control و IoC Container ها دیدن کنید.

رای حل تمامی مشکلاتی که از آنها یاد شد و رسیدن به یک طراحی Loosely Coupled ما می‌توانیم از اصول Inversion of Control و Dependency Inversion استفاده کنیم. دقت کنید که Inversion of Control یک Principle است و نه یک Design Pattern. این که Inversion of Control یک Principle است به این معنی است که توصیه های سطح بالایی (High Level Guideline) در رابطه با طراحی را ارائه می ‌کند و ربطی به جزئیات پیاده‌ سازی (Implemention Detail) ندارد. شما می توانید اصل Inversion of Control را به روش های مختلفی در برنامه خود پیاده سازی کنید.

تصویری که در ادامه می بینید یکی از روش ‌های پیاده‌سازی اصل Inversion of Control است.

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

CLOSE
CLOSE