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

در قسمت قبلی از این آموزش در مورد انواع Dependency Injection صحبت کردیم.

اگر موافق باشید در ادامه به مثال قسمت های قبلی از این آموزش نگاهی بیندازیم. مثال مربوط به یک مشتری و کلاس DataAccess و همچنین کلاس Factory. در قسمت قبلی کد های مربوط به کلاس CustomerBusinessLogic برای به دست آوردن یک شی از کلاس CustomerDataAcces به شکل زیر نوشته شدند.

public interface ICustomerDataAccess
{
    string GetCustomerName(int id);
}

public class CustomerDataAccess: ICustomerDataAccess
{
    public CustomerDataAccess() {
    }

    public string GetCustomerName(int id) {
        return "Dummy Customer Name";        
    }
}

public class DataAccessFactory
{
    public static ICustomerDataAccess GetCustomerDataAccessObj() 
    {
        return new CustomerDataAccess();
    }
}

public class CustomerBusinessLogic
{
    ICustomerDataAccess _custDataAccess;

    public CustomerBusinessLogic()
    {
        _custDataAccess = DataAccessFactory.GetCustomerDataAccessObj();
    }

    public string GetCustomerName(int id)
    {
        return _custDataAccess.GetCustomerName(id);
    }
}

مشکلی که این روش دارد این است که در درون کلاس CustomerBusinessLogic ما از کلاس DataAccessFactory استفاده می کنیم. بنابراین اگر در آینده لازم باشد که یک پیاده سازی جدید از اینترفیس ICustomerDataAcces را داشته باشیم و از آن در درون کلاس CustomerBusinessLogic استفاده کنیم نیازمند ایجاد تغییرات در درون کلاس CustomerBusinessLogic هستیم. الگوی طراحی Dependency Injection این مشکل را به وسیله تزریق کردن Dependency ها حل و فصل می کند.

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

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

در تصویر زیر نموداری از نحوه پیاده سازی Dependency Injection در این مثال را می بینید.

مانطور که در تصویر مشخص است کلاس CustomerService به عنوان کلاس Injector نقش ایفا می کند و یک شی از کلاس Service که همان CustomerDataAcces هست را به کلاس Client یعنی CustomerBusinessLogic تحویل می‌دهد. این تزریق می تواند از یکی از سه روشی که در قسمت قبل از آن صحبت کردیم انجام شود. این روش ما را به سمت یک طراحی Loosely Coupled سوق می دهد. بیاید با هم این مثال را به طور دقیق ‌تر بررسی کنیم.

در قسمت بعدی از این آموزش در مورد روش تزریق از طریق تابع سازنده (Constructor Injection) صحبت خواهیم کرد.

دیدگاهتان را بنویسید

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