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

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

علاوه بر این اینترفیس ICustomerDataAcces که در نقش یک Abstraction قرار گرفته است بند دوم از تعریف اصل Dependency Inversion را بر قرار می کند. به عبارت دیگر Abstraction یعنی همان اینترفیس ICustomerDataAcces به جزئیات یعنی کلاس CustomerDataAcces وابسته نیست. بلکه جزئیات یعنی کلاس CustomerDataAcces به Abstraction یعنی اینترفیس ICustomerDataAcces وابسته است. منظور از جزئیات در این قسمت جزئیات پیاده سازی یا همان Implementation Details می باشد. در ادامه کد کامل مربوط به مثال اصل Dependency Inversion را می بینید.

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);
    }
}

ممکن است فهمیده باشید که مهمترین مزیت پیاده سازی اصل Dependency Inversion در مثال بالا این است که کلاس های CustomerBusinessLogic و CustomerDataAcces به صورت Loosely Coupled طراحی شده اند. چرا که CustomerBusinessLogic وابسته به کلاس DataAccess که یک کلاس Concrete است نمی باشد. بلکه وابستگی کلاس CustomerBusinessLogic این بار به Abstraction یا Interface ی به نام ICustomerDataAcces است.

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

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

نتیجه ی این کار این است که ما می توانیم به سادگی از یک کلاس دیگر که اینترفیس ICustomerDataAcces پیاده سازی می کند و برای متد GetCustomerName آن یک بدنه پیاده سازی می کند را مورد استفاده قرار دهیم.

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

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

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