الگوهای طراحی راه حل های اثبات شده ای برای مشکلات طراحی نرمافزار هستند. آنها به بهبود کیفیت کد، ارتقای قابلیت استفاده مجدد و افزایش قابلیت نگهداری کمک می کنند. ما از آنها برای صرفهجویی در زمان و تولید کد های با کیفیت، توسعهپذیر و انعطافپذیر استفاده میکنیم. در این مطلب قصد داریم الگوی طراحی Chain of Responsibility را معرفی کنیم.
الگوی زنجیره مسئولیت یا Chain of Responsibility یک الگوی طراحی رفتاری(Behavioral) است که یک شی را قادر می سازد تا درخواستی را در امتداد زنجیره ای از Handler ها ارسال کند تا زمانی که یکی از آنها آن را رسیدگی کند. معمولاً در سیستمهایی استفاده میشود که در آن چندین شی میتوانند یک درخواست واحد را مدیریت کنند و سیستم باید تعیین کند که کدام شی باید به صورت پویا درخواست را رسیدگی کند.
الگوی Chain of Responsibility از اجزاء زیر تشکیل شده است:
در ادامه یک مثال از الگوی Chain of Responsibility در C# آمده است:
public abstract class SupportHandler
{
protected SupportHandler _nextHandler;
public SupportHandler SetNextHandler(SupportHandler handler)
{
_nextHandler = handler;
return handler;
}
public abstract string HandleRequest(int request);
}
public class TechnicalSupportHandler : SupportHandler
{
public override string HandleRequest(int request)
{
if (request <= 100)
{
return "Technical support can handle this request.";
}
else
{
return _nextHandler.HandleRequest(request);
}
}
}
public class SalesSupportHandler : SupportHandler
{
public override string HandleRequest(int request)
{
if (request <= 200)
{
return "Sales support can handle this request.";
}
else
{
return _nextHandler.HandleRequest(request);
}
}
}
public class GeneralSupportHandler : SupportHandler
{
public override string HandleRequest(int request)
{
return "General support can handle this request.";
}
}
در این مثال کلاس SupportHandler کلاس پایه انتزاعی است که متدی را برای رسیدگی به درخواست ها تعریف می کند. همچنین حاوی اشاره ای به کنترل کننده(Handler) بعدی در زنجیره است.
کلاس های TechnicalSupportHandler، SalesSupportHandler و GeneralSupportHandler پیاده سازی های مشخص کلاس SupportHandler هستند که به درخواست های مخصوص خودشان رسیدگی میکنند.
در متد HandleRequest هر یک از Handler ها، بررسی می کند که آیا می تواند درخواست را انجام دهد یا خیر. اگر بتواند، درخواست را رسیدگی می کند و پاسخی را برمی گرداند. در غیر این صورت، با فراخوانی متد HandleRequest مربوط به کنترل کننده بعدی، درخواست را به کنترل کننده بعدی در زنجیره ارسال می کند.
الگوی Chain of Responsibility رویکردی انعطافپذیر برای ارسال درخواستها در امتداد زنجیرهای از Handler ها فراهم میکند. این الگو به طور گسترده در سیستم هایی که در آن چندین شی می توانند یک درخواست را رسیدگی کنند استفاده می شود.
اگر از فریمورک های تحت وب نظیر Asp.Net، Laravel یا Express استفاده کرده باشید، حتما با میانافزار ها یا Middleware ها آشنا هستید. Middleware ها یک پیاده سازی از الگوی Chain Of Responsibility هستند که یک درخواست وارد شده به سیستم را مرحله به مرحله مدیریت کرده و به آن رسیدگی میکنند.
برای مطالعه سایر الگو های طراحی، میتوانید از لیست زیر استفاده کنید. همچنین یک مخزن کد در گیت هاب که شامل همهی الگو های طراحی میشود، برای شما قرار گرفته است.
من محمدرضا باباخانی هستم، توسعه دهنده نرم افزار. در اینجا تجربیات، نظرات و پیشنهادات خودم رو درباره تکنولوژی مینویسم. امیدوارم مطالبی که مینویسم بدردتون بخوره.
ثبت دیدگاه