دیزاین پترنها یا الگوهای طراحی به مجموعهای از راهحلها برای مشکلات متداول و پیشبینی شده میگویند که افراد حرفهای در برنامهنویسی از آنها استفاده میکنند ما 23 تا الگو طراحی داریم که هرکدام راه حلی برای مشکلی هستند این 23 الگو توسط 4 نفر معروف به gang of four جمعآوری شدهاند که میتوان در گوگل اطلاعات بیشتری در مورد آنها یافت. در این مقاله مقدمهای از الگوی visitor را آموزش میبینیم البته شما میتوانید با مراجعه به دوره آموزش دیزاین پترنها در وبسایت باگتو این 23 الگو را بهصورت کامل و کاربردی و همراه با مثال یاد بگیرید چرا که یادگیری دیزاین پترنها باعث متمایز شدن برنامهنویس حرفهای با همتیمیهای خود در شرکت است.
چه زمانی از این الگوی Visitor استفاده میکنیم و کاربرد آن چیست؟
کار الگوی ویزیتور این است که یک عملیات مشخص را از درون اشیا مختلف بیرون بکشد و درون یک کلاس قرار دهد و از داخل آن کلاس بتوانیم عملیاتهایی را که هرکدام به شئ خاصی مربوط هستند را مدیریت کنیم شاید این تعریف مقداری گنگ باشد در ادامه با مثالی این مفهوم را بهتر فرا خواهید گرفت.
فرض کنید میخواهیم یک اپلیکیشن بزرگ توسعه بدهیم که سرویسهای مختلف و زیادی دارد. برای مثال اسنپ سرویسهای مختلفی مانند snapp food و snap box دارد و تصور کنید که هرکدام از این سرویسها یک کلاس مشابه دارند مثلاً همه سرویسها کلاس order دارند و حال درون این کلاسهای مشابه عملیاتهایی شبیه به هم وجود دارد مثلاً درون همه کلاسهای مشابه عملیات ثبت سفارش وجود دارد اما هرکدام این عملیات را دارند به شکل جداگانهای پیاده میکنند یعنی پیادهسازیها متفاوت هستند حالا یک برنامهنویس غیرحرفهای هرکدام از عملیاتها را درون کلاس خودش پیادهسازی میکند اما یک مشکل وجود دارد. زمانی که تعداد کلاسها زیاد شود ما باید هرکدام از این عملیاتها را بر اساس یک شئ پیادهسازی کنیم و این خیلی مشکل بزرگی است حتی اگر هم از اینترفیس استفاده کنیم مشکلی که دارد این است که اگر تغییری در interface به وجود بیاید باید همه کلاسهای پیادهسازی تغییر کنند پس راهحل چیست؟
راهحل استفاده از دیزاین پترن ویزیتور است
الگوی Visitor به این صورت عمل می کند که تمامی عملیات هارا که درون این کلاس ها قرار دارند را از دل این کلاس ها بیرون می کشد و وارد یک کلاس دیگر می کندبه عنوان مثال با نام visitor و در آنجا همه این عملیات ها پیاده سازی شده اند و ما میتوانیم به راحتی آن هارا اجرا کنیم و مدیریت کنیم
بررسی UML الگوی Visitor
شاید در نگاه اول این 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 الگوی دیگر حتماً به دوره دیزاین پترنها سر بزنید چراکه مطالب ارزشمندی جهت ایجاد تفاوت بین شما و دیگر برنامهنویسان در انتظار شماست ...
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید