دیزاین پترن یا الگوی طراحیvisitor

دیزاین پترن یا الگوی طراحیvisitor
فهرست مقاله [نمایش]

    دیزاین پترن‌ها یا الگوهای طراحی به مجموعه‌ای از راه‌حل‌ها برای مشکلات متداول و پیش‌بینی شده می‌گویند که افراد حرفه‌ای در برنامه‌نویسی از آنها استفاده می‌کنند ما 23 تا الگو طراحی داریم که هرکدام راه حلی برای مشکلی هستند این 23 الگو توسط 4 نفر معروف به gang of four  جمع‌آوری شده‌اند که می‌توان در گوگل اطلاعات بیشتری در مورد آنها یافت. در این مقاله مقدمه‌ای از الگوی visitor  را آموزش می‌بینیم البته شما می‌توانید با مراجعه به دوره  آموزش دیزاین پترن‌ها در وب‌سایت باگتو این 23 الگو را به‌صورت کامل و کاربردی و همراه با مثال یاد بگیرید چرا که یادگیری دیزاین پترن‌ها باعث متمایز شدن برنامه‌نویس حرفه‌ای با هم‌تیمی‌های خود در شرکت است. 

    چه زمانی از این الگوی Visitor استفاده می‌کنیم و کاربرد آن چیست؟

    کار الگوی ویزیتور این است که یک عملیات مشخص را از درون اشیا مختلف بیرون بکشد و درون یک کلاس قرار دهد و از داخل آن کلاس بتوانیم عملیات‌هایی را که هرکدام به شئ خاصی مربوط هستند را مدیریت کنیم شاید این تعریف مقداری گنگ باشد در ادامه با مثالی این مفهوم را بهتر فرا خواهید گرفت.

    فرض کنید می‌خواهیم یک اپلیکیشن بزرگ توسعه بدهیم که سرویس‌های مختلف و زیادی دارد. برای مثال اسنپ سرویس‌های مختلفی مانند snapp food  و snap box  دارد و تصور کنید که هرکدام از این سرویس‌ها یک کلاس مشابه دارند مثلاً همه سرویس‌ها کلاس order  دارند و حال درون این کلاس‌های مشابه عملیات‌هایی شبیه به هم وجود دارد مثلاً درون همه کلاس‌های مشابه عملیات ثبت سفارش وجود دارد اما هرکدام این عملیات را دارند به شکل جداگانه‌ای پیاده می‌کنند یعنی پیاده‌سازی‌ها متفاوت هستند حالا یک برنامه‌نویس غیرحرفه‌ای هرکدام از عملیات‌ها را درون کلاس خودش پیاده‌سازی می‌کند اما یک مشکل وجود دارد. زمانی که تعداد کلاس‌ها زیاد شود ما باید هرکدام از این عملیات‌ها را بر اساس یک شئ پیاده‌سازی کنیم و این خیلی مشکل بزرگی است حتی اگر هم از اینترفیس استفاده کنیم مشکلی که دارد این است که اگر تغییری در interface  به وجود بیاید باید همه کلاس‌های پیاده‌سازی تغییر کنند پس راه‌حل چیست؟

    راه‌حل استفاده از دیزاین پترن ویزیتور است

     الگوی Visitor  به این صورت عمل می کند که تمامی عملیات هارا که درون این کلاس ها قرار دارند را از دل این کلاس ها بیرون می کشد و وارد یک کلاس دیگر می کندبه عنوان مثال با نام visitor  و در آنجا همه این عملیات ها پیاده سازی شده اند و ما میتوانیم به راحتی آن هارا اجرا کنیم و مدیریت کنیم
     

    بررسی UML  الگوی Visitor

     

    uml visitore

    شاید در نگاه اول این uml بسیار پیچیده به نظر بیاید اما در ادامه متوجه می‌شویم که اصلاً این‌گونه نیست و به‌راحتی می‌توان آن را درک کرد
    در این الگو  concrete element a و  concrete element b همان کلاس‌های order  ما هستند در مثال قبلی کلاس order  در سرویس‌های snap box  و snap food  از یک کلاس element  که می‌تواند abstract  و یا  interface باشد ارث‌بری کرده‌اند برای اینکه عملیات‌ها یک‌دست باشند و ساختار آن‌ها یکی باشد که بتوانیم با آنها مانند یک لیست کار کنیم 
    یک کلاس دیگر می‌بینیم به نام  object structure  که کار این کلاس این است که یک لیست از این concreteها درون خودش داشته باشد که بتوانیم آنها را مدیریت کنیم و عملیات اصلی را روی آن اجرا کنیم و کلاس client به‌صورت مستقیم با این کلاس کار می‌کند.
    یک کلاس visitor داریم که دوتا کلاس آمده‌اند و آن را پیاده‌سازی کرده‌اند و این کلاس visitor همان کلاس الگوی ویزیتور هست که همه عملیات‌ها را درون آن جمع می‌کنیم و باید به‌ازای هر کلاس concrete element  یک متد پابلیک درون این کلاس بسازیم که از ورودی یک شی از آن کلاس 
    concrete element دریافت کند و حالا در کلاس‌های concrete visitor  عملیات‌ها را پیاده‌سازی می‌کنیم 
    الگوی ویزیتور الگوی نسبتاً پیچیده‌ای است و برای درک بهتر این الگو بهتر است که حتماً به بخش visitor دوره دیزاین پترن‌ها مراجعه کنید چرا که به‌صورت کامل‌تر و واضح‌تر در آن جا این الگو آموزش‌داده‌شده است

    نقاط قوت الگوی Visitor

    رعایت اصل open/close

     رعایت اصل SRP

     تعریف Visitor  جدید ساده است

     در زمان اجرا می‌توانیم visitor هارا تغییر دهیم 

     Businesss logic  برنامه در کلاس visitor  متمرکز شده است.


    نقاط ضعف الگوی Visitor

     با افزودن هر کلاس جدید به برنامه باید تمامی visitorها به‌روزرسانی شوند

    Visitor  دسترسی به اعضای خصوصی اشیا ندارد

     بین کلاس‌های concrete element  اتصال محکم برقرار شده است.

    برای درک بهتر این الگو و البته 23 الگوی دیگر حتماً به دوره دیزاین پترن‌ها سر بزنید چراکه مطالب ارزشمندی جهت ایجاد تفاوت بین شما و دیگر برنامه‌نویسان در انتظار شماست ...

    اطلاعات نویسنده
    • نویسنده: احمدرضا غلامی

    ارسال دیدگاه

    برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربری‌تان شوید


    دیدگاه کاربران