در توسعه نرم افزار مدرن، ایجاد چارچوب های ورود انعطاف پذیر و قابل نگهداری برای اشکال زدایی موثر و نظارت ضروری است. زنجیره ای از الگوی مسئولیت ارائه می دهد یک راه قدرتمند برای طراحی چنین سیستم هایی با اجازه دادن به چندین مسئول برای پردازش پیام های ورود به شیوه ای جدا شده است.این مقاله بررسی می کند که چگونه یک چارچوب ورود ماژولار در C # با استفاده از این الگو طراحی کنید.

درک زنجیره ای از الگوی مسئولیت

زنجیره مسئولیت شامل عبور از یک درخواست در امتداد زنجیره ای از مسئولیت ها تا زمانی که یکی از آنها آن را اداره می کند.در ورود، هر مسئول می تواند تصمیم بگیرد که آیا به پردازش یک پیام log، عبور آن را در، و یا هر دو، انعطاف پذیری را ترویج می دهد، زیرا مدیران جدید می توانند بدون تغییر کد موجود اضافه شوند.

طراحی چارچوب ورود

برای پیاده سازی این الگو، یک کلاس logger انتزاعی را تعریف کنید که شامل مرجع به دسته بعدی. Concrete loggers از این کلاس به ارث می رسد و منطق پردازش خاص خود را پیاده سازی می کند.

  • [[۱] [۱۰] [۱] [۱۰] [۱]: کلاس با یک روش برای رسیدگی به پیام ها و مرجع به فرستنده بعدی.
  • [[۱] [۱۰] [۱]: [۱] [۱]: پیاده سازی های خاص مانند کنسولLogger، FileLogger، و غیره.
  • [در این میان] [در این میان] [از [براى] [از [براى] [براى] [و]] [براى] [براى]] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى [براى] [براى [براى] [براى] [براى] [براى] [براى [براى [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى [براى [براى [براى [براى] [براى] [براى] [براى] [براى] [براى] [براى [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [براى] [بر

اجرای Abstract loger

کلاس انتزاعی یک روش (FLT:0) را تعریف می کند که پیام را پردازش می کند یا پیش رو می کند.این همچنین شامل یک روش برای تنظیم لاگر بعدی در زنجیره است.

public abstract class Logger
{
 protected Logger nextLogger;

 public void SetNext(Logger next)
 {
 nextLogger = next;
 }

 public void Log(string message)
 {
 if (CanHandle(message))
 {
 WriteMessage(message);
 }
 if (nextLogger != null)
 {
 nextLogger.Log(message);
 }
 }

 protected abstract bool CanHandle(string message);
 protected abstract void WriteMessage(string message);
}

ایجاد فرستنده های بتنی

هر یک از لاگین های بتنی (FLT:2) و [FLT3] روش های برای مشخص کردن منطق پردازش را باطل می کنند، به عنوان مثال، یک لاگین کنسول ممکن است تمام پیام ها را مدیریت کند، در حالی که یک logger فایل تنها پیام های خطا را مدیریت می کند.

public class ConsoleLogger : Logger
{
 protected override bool CanHandle(string message)
 {
 // Handle all messages
 return true;
 }

 protected override void WriteMessage(string message)
 {
 Console.WriteLine($"Console: {message}");
 }
}

public class ErrorFileLogger : Logger
{
 protected override bool CanHandle(string message)
 {
 // Example: handle only error messages
 return message.Contains("Error");
 }

 protected override void WriteMessage(string message)
 {
 // Write to error log file
 File.AppendAllText("error.log", message + Environment.NewLine);
 }
}

معرفی بازی The Loger Chain

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

var consoleLogger = new ConsoleLogger();
var errorLogger = new ErrorFileLogger();

consoleLogger.SetNext(errorLogger);

// Usage
consoleLogger.Log("This is a regular message.");
consoleLogger.Log("Error: Something went wrong.");

مزایای استفاده از الگو

پیاده سازی چارچوب ورود با الگوی مسئولیت زنجیره ای مزایای مختلفی را ارائه می دهد:

  • احتمال: به راحتی به دسته های جدید بدون تغییر کد موجود اضافه کنید.
  • [[۱] [۱۰] [[۱۰]] [[۱۰]]] [[۱۰]]]] [[۱]]]] [[۱۰]]]] [۱]]] [[۱]]]]] [[۱۰]]]] [[[۱]]]]] [۱]]]] [۱]] [۱]]] [۱]] [۳۲] [۳۲] [۳۲] [۶] [۳۲] [۳۲] [۳۲] [۳۲] [بر [برداران [بر [به طور مستقل کار می کنند، و [به طور کامل [به کار می پردازند.
  • قابلیت: زنجیره های مختلف را برای سناریوهای مختلف شکل دهید.

نتیجه گیری

طراحی یک چارچوب ورود ماژولار با استفاده از الگوی مسئولیت در C# قابلیت نگهداری و مقیاس پذیری را افزایش می دهد.با کاهش دسته ها و امکان پیکربندی زنجیره پویا، توسعه دهندگان می توانند سیستم های قوی ورود به نیازهای برنامه خود را ایجاد کنند.