ناشناس
سوال 2371
در مورد دیزاین پترن Strategy چه می دانید؟
ثبت پاسخ جدید
برای ثبت پاسخ، لطفا وارد حساب کاربری خود شوید.
پاسخها
1 پاسخDesign Pattern (الگوی طراحی) اشاره به راهکاری تستشده و اصولی با قابلیت استفادۀ مجدد در برنامهنویسی شییٔگرا دارد که در پاسخ به چالشهای توسعۀ نرمافزار ایجاد شده است و در واقع تِمپلِیتی جهت ارائۀ سولوشنی برای حل مسائل رایج میباشد. در واقع، دیزاین پترنها یکسری به اصطلاح Best Practice هستند که امکان توسعۀ اپلیکیشنهایی انعطافپذیر، تغییرپذیر با قابلیت نگاهداری بالا را برای دولوپرها فراهم میکنند که یکی از آنها، الگوی طراحی استراتژی است که در این آموزش خواهیم دید به چه شکل میتوان آن را در زبان برنامهنویسی پیاچپی پیادهسازی کرد.
به طور کلی، دیزاین پترنها در سه دستۀ اصلی قرار میگیرند که عبارتند از Structural ،Creational و Behavioral که در این مقاله قصد داریم تا به بررسی Strategy Pattern بپردازیم که تحت عنوان Policy Pattern نیز شناخته میشود و زیرشاخۀ دیزاین پترنهای Behavioral است که ارتباط مابین آبجکتها را مدیریت میکنند.
آشنایی با کاربرد Strategy Design Pattern
پیش از هر چیز، بهتر است به این پرسش پاسخ دهیم که در چه مواقعی باید از دیزاین پترن استراتژی استفاده کنیم. در پاسخ به این سؤال باید گفت زمانی که چند راه یا بهتر بگوییم چند الگوریتم مختلف برای انجام تَسکی یکسان داشته باشیم که اپلیکیشن مد نظر باید یکی از این روشها را در حین اجرا و بر اساس پارامترهای خاصی انتخاب کند، باید از این دیزاین پترن استفاده نماییم (برای مثال، فرض کنید که چند الگوریتم مرتبسازی داریم و بر اساس تعداد عناصر یک آرایه، الگوریتمی انتخاب خواهد شد که منجر به بهبود پرفورمنس اپلیکیشن شود.)
برای روشن شدن نحوهٔ پیادهسازی الگوی طراحی استراتژی، یک سناریوی فرضی را در نظر بگیرید بدین صورت که فروشگاه آنلاینی با درگاههای پرداخت متعددی داریم که علیرغم وجود چندین درگاه پرداخت، همۀ آنها در قسمت فرانتاند برای کاربر نمایش داده نمیشوند و این در حالی است که درگاه پرداخت مناسب باید در لحظه و بر اساس ارزش ریالی سبد خرید کاربر انتخاب شود به طوری که مثلاً اگر ارزش سبد خرید وی کمتر از 500/000 ریال بود، پردازش تراکنش با استفاده از سرویس پرداخت پِیپَل انجام خواهد شد اما اگر ارزش سبد خرید 500/000 ریال یا بیشتر بود، تراکنش با استفاده از یک کارت اعتباری انجام خواهد شد. در چنین شرایطی اگر بخواهیم سرویس خود را بدون پیادهسازی دیزاین پترن استراتژی بنویسیم، راهکاری مانند زیر خواهیم داشت:
پیش از هر توضیحی، توجه داشته باشیم که کلیهٔ فایلهای این آموزش باید با دستور php?> شروع شوند که به دلیل شلوغ نشدن کدها، از نوشتن این دستور در تمامی اسکریپتهای این آموزش خودداری کردهایم. در تفسیر کدهای فوق باید بگوییم که در ابتدا دو کلاس اصلی تحت عناوین PayByCC و PayByPayPal برای هر دو روش پرداخت از طریق پِیپَل و درگاه مربوط به کارت اعتباری کاربر تعریف شده که نتیجهٔ مد نظر خود را میتوان با دستورات شرطی پیادهسازی کرد.
توجه داشته باشیم که این کلاسها در قسمتهای مختلف وب اپلیکیشن به کار رفتهاند و از همین روی تغییر کُدها در عمل کار سادهای نخواهد بود و ممکن است باعث ایجاد اختلال در عملکرد کلی نرمافزار گردد که در چنین مواقعی راهحل مناسب پیادهسازی استراتژی پترن است که با استفاده از آن دولوپرها به راحتی قادر خواهند بود تا تَسکهای مد نظر خود را هندل کنند با این تفاوت که کُدی قابلفهم، قابلتوسعه و تمیز خواهند داشت.
بنابراین راهحل مناسب برای رفع مشکل فوقالذکر این است که در ابتدا اینترفیسی بنویسم تا توسط تمامی کلاسهای مربوط به درگاههای پرداخت مختلف قابلاستفاده باشد.
به طور کلی، دیزاین پترنها در سه دستۀ اصلی قرار میگیرند که عبارتند از Structural ،Creational و Behavioral که در این مقاله قصد داریم تا به بررسی Strategy Pattern بپردازیم که تحت عنوان Policy Pattern نیز شناخته میشود و زیرشاخۀ دیزاین پترنهای Behavioral است که ارتباط مابین آبجکتها را مدیریت میکنند.
آشنایی با کاربرد Strategy Design Pattern
پیش از هر چیز، بهتر است به این پرسش پاسخ دهیم که در چه مواقعی باید از دیزاین پترن استراتژی استفاده کنیم. در پاسخ به این سؤال باید گفت زمانی که چند راه یا بهتر بگوییم چند الگوریتم مختلف برای انجام تَسکی یکسان داشته باشیم که اپلیکیشن مد نظر باید یکی از این روشها را در حین اجرا و بر اساس پارامترهای خاصی انتخاب کند، باید از این دیزاین پترن استفاده نماییم (برای مثال، فرض کنید که چند الگوریتم مرتبسازی داریم و بر اساس تعداد عناصر یک آرایه، الگوریتمی انتخاب خواهد شد که منجر به بهبود پرفورمنس اپلیکیشن شود.)
برای روشن شدن نحوهٔ پیادهسازی الگوی طراحی استراتژی، یک سناریوی فرضی را در نظر بگیرید بدین صورت که فروشگاه آنلاینی با درگاههای پرداخت متعددی داریم که علیرغم وجود چندین درگاه پرداخت، همۀ آنها در قسمت فرانتاند برای کاربر نمایش داده نمیشوند و این در حالی است که درگاه پرداخت مناسب باید در لحظه و بر اساس ارزش ریالی سبد خرید کاربر انتخاب شود به طوری که مثلاً اگر ارزش سبد خرید وی کمتر از 500/000 ریال بود، پردازش تراکنش با استفاده از سرویس پرداخت پِیپَل انجام خواهد شد اما اگر ارزش سبد خرید 500/000 ریال یا بیشتر بود، تراکنش با استفاده از یک کارت اعتباری انجام خواهد شد. در چنین شرایطی اگر بخواهیم سرویس خود را بدون پیادهسازی دیزاین پترن استراتژی بنویسیم، راهکاری مانند زیر خواهیم داشت:
پیش از هر توضیحی، توجه داشته باشیم که کلیهٔ فایلهای این آموزش باید با دستور php?> شروع شوند که به دلیل شلوغ نشدن کدها، از نوشتن این دستور در تمامی اسکریپتهای این آموزش خودداری کردهایم. در تفسیر کدهای فوق باید بگوییم که در ابتدا دو کلاس اصلی تحت عناوین PayByCC و PayByPayPal برای هر دو روش پرداخت از طریق پِیپَل و درگاه مربوط به کارت اعتباری کاربر تعریف شده که نتیجهٔ مد نظر خود را میتوان با دستورات شرطی پیادهسازی کرد.
توجه داشته باشیم که این کلاسها در قسمتهای مختلف وب اپلیکیشن به کار رفتهاند و از همین روی تغییر کُدها در عمل کار سادهای نخواهد بود و ممکن است باعث ایجاد اختلال در عملکرد کلی نرمافزار گردد که در چنین مواقعی راهحل مناسب پیادهسازی استراتژی پترن است که با استفاده از آن دولوپرها به راحتی قادر خواهند بود تا تَسکهای مد نظر خود را هندل کنند با این تفاوت که کُدی قابلفهم، قابلتوسعه و تمیز خواهند داشت.
بنابراین راهحل مناسب برای رفع مشکل فوقالذکر این است که در ابتدا اینترفیسی بنویسم تا توسط تمامی کلاسهای مربوط به درگاههای پرداخت مختلف قابلاستفاده باشد.