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

ذر قسمت قبلی از این آموزش در مورد کنترل ساختن وابستگی‌ ها صحبت کردیم.

با این تغییر دیگر کلاس A مسئول ساختن یک شی از کلاس B نیست بلکه کلاس A از یک کلاس دیگر به نام Factory برای به دست آوردن یک شی از کلاس B استفاده می کنند.

حال بیایید همین موضوع یعنی کنترل ساختن Dependency ها را در یک مثال کاربردی تر ببینیم. در طراحی شی گرا کلاس ها باید به صورت از Loosely Coupled طراحی شوند. Loosely Coupled بودن به این معنی است که تغییرات در یک کلاس نباید باعث ایجاد تغییراتی در کلاس ‌های دیگر شود. این باعث می شود که برنامه به طور کلی قابلیت نگهداری (Maintainability) و قابلیت گسترش (Extensibility) بالاتری داشته باشد. بیایید با نگاه کردن به تصویر زیر که یک معماری N-Tier معمول را نشان می دهد این موضوع را بررسی کنیم.

در یک معماری N-Tier معمول واسط کاربری برنامه (UI) از لایه سرویس (Service Layer) برای بازیابی و ذخیره کردن داده ها استفاده می‌کند. لایه ی سرویس (Service Layer) از کلاس‌ Business Logic برای اعمال کردن Business Rule ها بر روی داده استفاده می‌کند. کلاس Business Logic به کلاس Data Acces وابستگی دارد و وظیفه ی کلاس Data Access بازیابی یا ذخیره کردن داده ها بر روی دیتابیس است. این یک معماری N-Tier ساده است. در ادامه بیاید بر روی کلاس های Data Access و Business Logic تمرکز کرده تا بتوانیم مفهوم Inversion of Control را در این مثال متوجه شویم.

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

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

کدی که در ادامه می بینید دو کلاس ساده ی Business Logic و Data Access را نشان می دهد که برای Entity ی به نام Customer یا همان مشتری پیاده‌ سازی شده اند.

public class CustomerBusinessLogic
{
    DataAccess _dataAccess;

    public CustomerBusinessLogic()
    {
        _dataAccess = new DataAccess();
    }

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

public class DataAccess
{
    public DataAccess()
    {
    }

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

همانطور که از کد بالا متوجه می‌شوید کلاس CustomerBusinessLogic به کلاس DataAcces وابستگی دارد. به عبارت دیگر این کلاس برای خواندن اطلاعات مربوط به مشتری یک شی از کلاس DataAccess را در درون خود ایجاد می‌کند. حال بیایید در رابطه با مشکلات این نوع طراحی صحبت کنیم.

ذر قسمت بعدی از این آموزش در مورد ادامه ی همین مبحث صحبت خواهیم کرد.

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

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