در توسینسو تدریس کنید

و

با دانش خود درآمد کسب کنید

آموزش اصول SOLID در برنامه نویسی قسمت 5 : Dependency Inverse

در این قسمت با آخرین قاعده SOLID، یعنی Dependency Inversion آشنا می شویم. زمانی که شما مبتنی بر تکنیک های شئ گرایی برنامه می نویسید، به طور حتم، کلاس هایی خواهید داشت که وابسته به کلاس های دیگر هستند. قاعده Single Responsiblity رو به یاد دارید؟ گفتیم هر کلاس باید تنها و تنها یک وظیفه خاص را انجام دهد و سایر وظایف را به کلاس های مربوطه محول کند. اما نباید ارتباط مستقیمی بین کلاس ها وجود داشته باشد! اصطلاحاً گفته میشه که باید ارتباط بین کلاس ها Loosely Coupled باشد. به مثال زیر دقت کنید:

public class EmailNotification
{
    public void Send(string message)
    {
        // send email
    }
}

public class DatabaseManager
{
    private EmailNotification notification;

    public DatabaseManager()
    {
        notification = new EmailNotification();
    }

    public void Add()
    {
        notification.Send("Record added to database!");
    }

    public void Remove()
    {
        notification.Send("Record removed to database!");
    }

    public void Persisit()
    {
        notification.Send("Changes submitted to database!");
    }
}

کلاسی داریم با نام DatabaseManager که با فراخوانی هر یک از متدهای آن، ایمیلی برای یک آدرس مشخص ارسال می شود. در کد بالا وظایف تقسیم بندی شده، یعنی قاعده SRP در نظر گرفته شده، اما ارتباطی که میان کلاس DatabaseManager و کلاس EmailNotification وجود دارد، مستقیم است. فرض کنید بخواهیم به جای ارسال رویداد بوسیله Email از پیامک استفاده کنیم، باید کلاس جدیدی تعریف شود و کلاس DatabaseManager تغییر کند تا رویدادها بوسیله پیامک ارسال شوند. اما با پیاده سازی مبتنی بر قاعده Dependency Inversion، این کار به راحتی امکان پذیر خواهد بود، برای این کار ابتدا یک interface با نام INotification تعریف می کنیم:

public interface INotification
{
    void Send(string message);
}

حال، کلاس هر کلاسی که عملیات ارسال رویداد را انجام می دهد، می بایست interface ای که تعریف کردیم را پیاده سازی کند، در زیر دو کلاس EmailNotification و SMSNotification را تعریف میکنیم:

public class EmailNotification : INotification
{
    public void Send(string message)
    {
        // send email
    }
}

public class SMSNotification : INotification
{
    public void Send(string message)
    {
        // send sms
    }
}

حال کلاس DatbaseManager را جوری تغییر می دهیم تا وابستگی آن نسبت به یک کلاس از بین رفته و وابسته به interface تعریف شده باشد:

public class DatabaseManager
{
    private INotification notification;

    public DatabaseManager(INotification notification)
    {
        this.notification = notification;
    }

    public void Add()
    {
        notification.Send("Record added to database!");
    }

    public void Remove()
    {
        notification.Send("Record removed to database!");
    }

    public void Persisit()
    {
        notification.Send("Changes submitted to database!");
    }
}

با تغییر بالا، کلاس DatabaseManager هیچ وابستگی به کلاس خاصی ندارد و می توان زمان ساخت شئ از روی آن، Dependecy مربوطه را برای آن مشخص کرد:

DatabaseManager manager = new DatabaseManager(new SMSNotification());

و در صورتی که بخواهیم از سرویس ایمیل استفاده کنیم:

DatabaseManager manager = new DatabaseManager(new EmailNotification());

با تغییرات انجام شده، قاعده Dependecy Inversion را در کد خود اعمال کردیم. امیدوارم که مطالعه این پنج قسمت که راجع SOLID بود، به دوستان کمک کند تا کدهایی که می نویسیند به استانداردهای برنامه نویسی شئ گرا نزدیکتر بشه. ITPRO باشید

نویسنده: حسین احمدی
انجمن تخصصی فناوری اطلاعات ایران
#تکنیک_های_برنامه_نویسی #نکات_برنامه_نویسی #قواعد_solid_در_برنامه_نویسی #قاعده_dependency_inversion
عنوان
1 آموزش اصول SOLID در برنامه نویسی قسمت 1 : مقدمه و SRP رایگان
2 آموزش اصول SOLID در برنامه نویسی قسمت 2 : Open Closed رایگان
3 آموزش اصول SOLID در برنامه نویسی قسمت 3 : Liskov Substitute رایگان
4 آموزش اصول SOLID در برنامه نویسی قسمت 4: Interface Segregate رایگان
5 آموزش اصول SOLID در برنامه نویسی قسمت 5 : Dependency Inverse رایگان
زمان و قیمت کل 0″ 0
0 نظر

هیچ نظری ارسال نشده است! اولین نظر برای این مطلب را شما ارسال کنید...

نظر شما
برای ارسال نظر باید وارد شوید.
از سرتاسر توسینسو
تنظیمات حریم خصوصی
تائید صرفنظر
×

تو می تونی بهترین نتیجه رو تضمینی با بهترین های ایران بدست بیاری ، پس مقایسه کن و بعد خرید کن : فقط توی جشنواره تابستانه می تونی امروز ارزونتر از فردا خرید کنی ....