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

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

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

اصل Dependency Inversion

در قسمت‌ های قبلی از این آموزش از وب سایت پرووید ما در رابطه با پیاده سازی اصل Inversion of Control با استفاده از الگوی طراحی Factory صحبت کردیم. این موضوع اولین قدم ما در رسیدن به یک طراحی Loosely Coupled بود. در ادامه این آموزش ما در رابطه با پیاده سازی اصل Dependency Inversion به عنوان دومین قدم در روند رسیدن به یک طراحی Loosely Coupled صحبت خواهیم کرد.

در ابتدا باید با هم اصل Dependency Inversion (معکوس سازی وابستگی) را بررسی کنیم. این اصل یکی از اصول پنجگانه SOLID است که در طراحی شی گرا اولین بار توسط آقای Robert C. Martin مطرح شد.

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

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

تعریف اصل Dependency Inversion

بند اول: ماژول های سطح بالا (High Level Module) نباید به ماژول های سطح پایین (Low Level Module) وابسته باشند. بلکه هر دوی آنها باید به Abstraction وابسته باشند.

بند دوم: Abstraction ها نباید وابسته به Details (جزئیات) باشند. Details (جزئیات) باید وابسته به Abstraction باشند. بیایید برای بهتر فهمیدن اصل Dependency Inversion مثالی که از قسمت های قبلی بررسی کرده بودیم را یک بار دیگر در نظر بگیریم. لطفاً کد زیر را با دقت نگاه کنید.

public class CustomerBusinessLogic
{
    public CustomerBusinessLogic()
    {
    }

    public string GetCustomerName(int id)
    {
        DataAccess _dataAccess = DataAccessFactory.GetDataAccessObj();

        return _dataAccess.GetCustomerName(id);
    }
}

public class DataAccessFactory
{
    public static DataAccess GetDataAccessObj() 
    {
        return new DataAccess();
    }
}

public class DataAccess
{
    public DataAccess()
    {
    }

    public string GetCustomerName(int id) {
        return "Dummy Customer Name"; // get it from DB in real app
    }
}

در مثال بالا ما الگوی طراحی Factory را برای رسیدن به Inversion of Control استفاده کردیم. اما موضوع اینجاست که کلاس CustomerBusinessLogic از یک کلاس Concrete (امیدوارم تفاوت بین کلاس های Concrete و Abstract را بدانید.) استفاده می کند و آن DataAccess است. بنابراین بین دو کلاس DataAccess و CustomerBusinessLogic هنوز هم Tight Coupling وجود دارد. هر چند که ما مسئولیت ساختن یک شی جدید از این وابستگی را به کلاس Factory محول کردیم. بیایید در ادامه با پیاده‌سازی اصل Dependency Inversion بر روی دو کلاس DataAccess و CustomerBusinessLogic آن ها را بیش از پیش Loosely Coupled کنیم.

نظر بدهید

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