מערכות בקרה ואוטומציה
עיצוב מסגרת קידוד מודולרי באמצעות שרשרת של אחריות דפוס C#
Table of Contents
בפיתוח תוכנה מודרני, יצירת מסגרות גמישות ושמירה על יכולת יעילה לדהור ופיקוח.שרשרת של דפוס אחריות מציעה דרך חזקה לעצב מערכות כאלה על ידי מתן מטפלים מרובים כדי לעבד הודעות באופן מרתיע. מאמר זה חוקר כיצד לעצב מסגרת סטנדרטית של מיקום C# באמצעות דפוס זה.
הבנת שרשרת האחריות
תבנית האחריות כוללת בקשה לאורך שרשרת של מטפלים עד שאחד מהם מטפל בה.בכניסה, כל מטפל יכול להחליט אם לעבד הודעת יומן, להעביר אותו הלאה, או שניהם. גישה זו מקדמת גמישות, כפי שניתן להוסיף מטפלים חדשים מבלי לשנות קוד קיים.
עיצוב מסגרת Logging
כדי ליישם דפוס זה, להגדיר מחלקה לוגר מופשט הכולל התייחסות ל-Competer הבא. Concrete loggers יורשו מהכיתה זו וליישם את לוגיקה העיבוד הספציפי שלהם.המרכיבים העיקריים כוללים:
- (ב) ,0) ,בסטרקט לגר"ד:1: שיעור הבסיס עם שיטה לטפל הודעות ויחס למגרש הבא.
- (ב) ,0) ,Concrete LoggersFLT:1: יישום ספציפי כמו קונסוללוגר, FileLogger, וכו '.
- (ב) ויקרא י"א: "ה', רצף של מטפלים שדרכו עוברים מסרים.
המונחים: the absolute Logger
המעמד המופשט מגדיר שיטה (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);
}
יצירת Concrete Loggers
כל אחד מהלוגרים קונקרטיים מפרש את ה-FLT:2 ו- (FLT 3: 3) שיטות כדי לציין טיפול בהגיון.לדוגמה, קונסולת הקונסולה עשויה לטפל בכל ההודעות, בעוד שקובץ מטפל רק בהודעות שגיאה.
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);
}
}
« « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « « «
כדי להגדיר את מערכת הכניסה, מיידית את הקובגרים ולקשר אותם בסדר הרצוי.כאשר הודעה נכנסת, היא חוצה את השרשרת, ומאפשרת לכל מטפל לעבד אותה אם יש צורך.
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.");
היתרונות של שימוש בתבנית
יישום מסגרת כניסה עם שרשרת של אחריות מציע מספר יתרונות:
- (ב) ,0) ,התמדה: 1FLT: 1:1 , להוסיף בקלות מטפלים חדשים מבלי לשנות את הקוד הקיים.
- (ב) ,0) ,ד"ר: 1FLT:1 Handlers לפעול באופן עצמאי, קידום עיצוב מודולרי.
- (ב) ⁇ :0) ⁇ (ב) , ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇ ⁇
מסקנה
עיצוב מסגרת כניסה מודולרית באמצעות שרשרת של דפוס אחריות ב C# משפר את יכולת המשיכה ואת ההיקף. על ידי decoupling מטפלs ומאפשר תצורה שרשרת דינמי, מפתחים יכולים ליצור מערכות אחסון חזקות המותאמים לצרכים של היישום שלהם.