انجمن برنامه نویسان البرز

تبلیغات

درس سوم – Facade Pattern – ساده و پرکاربرد

درس سوم – Facade Pattern – ساده و پرکاربرد


Facade Pattern یا الگوی “فساد” اولین الگویی است که درباره آن توضیح میدهم. – در ایران چون خیلی ها خجالت میکشند بگویند فساد، ممکن است اسمش را فسید هم بشنوید. تعجب نکنید :)) – فساد بر خلاف اسمش، خیلی هم الگوی خوبی است :))

وقتی توضیح Facade را بخوانید، به خودتان میگویید: ” همین؟! چقدر مسخرس! به چه دردی میخوره اصلا! “. این جمله را من هم اولین بار به خودم گفتم تا اینکه وقتی با Aggregate ها آشنا شدم، این Pattern را تازه درک کردم. بگذریم. اول بیایید ببینیم که موضوع این Pattern چیست؟

Facade Pattern چه میگوید؟

فرض کنید میخواهید یک شرکت ثبت کنید. ثبت یک شرکت، مراحل زیادی دارد. باید اساسنامه تنظیم کنید، دفاتر مالیاتی تحویل بدهید. فیش بانکی واریز کنید. فرم پر کنید و و و… سخت است نه؟ خوب ما معمولا این کارها را خودمان انجام نمیدهیم و آنها را به یک دفتر ثبت شرکت میسپاریم. به این ترتیب ما فقط با همان دفتر سر و کار داریم و بقیه کارها را همان دفتر برای ما انجام میدهد. معمولا ما حتی نمیدانیم ساز و کار و رویه هایی که آنها طی میکنند، اصلا چطوری است. ما فقط درخواتمان را میدهیم و همه چیز را به آنها میسپاریم.

این یعنی Facade Pattern . ساده بود نه؟ خوب پس Facade Pattern در واقع یک واسط است تا ما درخواست هایمان را به آن بدهیم و خود این واسط، کارها را برای ما انجام بدهد. بنابراین ما نیازی نداریم که درگیر جزئیات بشویم.

برگردیم به مثال خودمان. پس دفتر ثبت شرکت، یک Facade است. این Facade بلد است با بعضی ارگان ها تعامل کند. مثلا اداره ثبت شرکت ها. اداره مالیات و و و… چرا؟ چون ساز و کار آنها را میشناسد و کارش را بلد است.

فرض کنید اداره مالیات، سازمان ثبت شرکت ها و دفتر ثبتی، هر کدام یک کلاس باشند. ما درخواستمان را به کلاس “دفتر ثبتی” میدهیم و خبری از کلاس “ثبت شرکت ها” و کلاس “اداره مالیات نداریم”. وظیفه هماهنگی با این دو کلاس، با کلاس “دفتر ثبتی است”

در ادامه یک مثال با کد هم برایتان میزنم.

خوب Facade Pattern اصلا به چه دردی میخورد؟

شما بدون اینکه بدانید، بارها و بارها از این Pattern استفاده کرده اید. هربار که یک سرویس را استفاده میکنید، هر بار که از یک Controller در MVC استفاده میکنید و خصوصا هر باری که از Dependency Injection استفاده میکنید، در واقع از Facade Pattern هم استفاده کرده اید.

یک مثال کاربردی تر:

فکر کنید میخواهید فاکتوری را در سیستم ثبت کنید. کسانی که قبلا برنامه نویسی کرده باشند میدانند که برای ثبت فاکتور احتیاج به یک جدول Master برای اطلاعات کلی فاکتور مثل تاریخ و مشتری و … داریم و یک جدول Detail برای اقلام فاکتور نیاز داریم. اما یک سوال. اینکه چطور باید اقلام یک فاکتور را ثبت کنیم، به ما چه ربطی دارد؟ ما فقط به فاکتور میگوییم که فلان کالا را در خودت اضافه کن. فلان کالا را حذف کن. فلان کالا را ویرایش کن. جزئیات انجام این کار، به ما ربطی ندارد. پس فاکتور ما باید از نوع Facade باشد. یعنی خودش بلد باشد اقلامش را اضافه و کم کند. پیشنهاد میکنم حتما این مقاله را بخوانید.

مثال با کد:


    public class Class1
    {
        public void MethodA()
        {
            //Do SOmething
        }
    }

    public class Class2
    {
        public void MethodB()
        {
            //Do SOmething
        }
    }

    public class FacadeClass
    {
        private Class1 _class1Field=new Class1();
        private Class2 _class2Field = new Class2();

        public void JobMethod()
        {
            _class2Field.MethodB();
            _class1Field.MethodA();
            //...
        }
    }

آیا Facade Pattern با single responsibility principle در تضاد نیست؟

جواب کوتاه اینکه خیر. در تضاد نیست. توضیح اینکه در SR ما اعتقاد داریم که یک کلاس باید فقط یک مسئولیت داشته باشد. خیلی ها این جمله را اشتباه درک میکنند و فکر میکنند یک کلاس باید یک کار محدود را انجام بدهد. در واقع تعریف بهتر SR این است که وظایف یک کلاس باید در چارچوب داخلی یک کلاس باشد. مثلا کلاس فاکتور نباید بتواند با پرینتر کار کند. چون کار با پرینتر اصلا در حوزه کاری فاکتور نیست و بحثی سخت افزاری است. اما اینکه یک فاکتور بتواند یک قلم کالا را در خودش اضافه کند، با SR در تضاد نیست.

 

در صورتی که به آموزش های ویدیویی علاقه مندید، فرم زیر را پر کنید تا لینک آموزش ها را به ایمیل شما ارسال کنم.




کلمات کلیدی :

نظر بدهید

2 دیدگاه برای “درس سوم – Facade Pattern – ساده و پرکاربرد

  • حمید گفته
    ۲۴ خرداد ۹۷

    سلام لطفالینک ویدئوهارابرای منم ارسال کنید البته۲۸قسمت سی شارپ دانلودکردم

    • علیرضا صبوئی گفته
      ۲۴ خرداد ۹۷

      حمید عزیزم همون ۲۸ قسمت هستش