עיצוב מנועי גלגול עבודה בלתי אפשריים עם תבנית המפעל הפשטנית ב- Java
מדוע מנועי זרימת העבודה דורשים יכולת
יישומים ארגוניים מודרניים חייבים להתאים במהירות לשינוי כללי עסקים, שינויים רגולטוריים וציפיות הלקוחות.מנוע זרימת עבודה - המרכיב הליבה שמזזזזז את ביצוע המשימה הזמנית או במקביל - מתפתל אם קשה קוד.עיצוב מנוע חיפוש עבודה בלתי צפוי פירושו שאתה יכול להציג סוגי משימה חדשים, שינוי לוגיקה, או אסטרטגיות עקשנות ללא כתיבת קטעים גדולים של הקוד.
הבנת תבנית המפעל
(התבנית של המפעל הפשטנית מספקת ממשק ליצירת משפחות של אובייקטים קשורים או תלויים מבלי לציין את מעמדם קונקרטיים.זה שימושי במיוחד כאשר מערכת חייבת להיות עצמאית על האופן שבו המוצרים שלה נוצרים, מורכבים ומייצגים.בהקשר של מנועי זרימת עבודה, בדרך כלל יש כמה משפחות של אובייקטים: FLT:0) TaskskFLT:1 (היחידה האטומית של העבודה), LT2 Transventment: 3.
התבנית פועלת על ידי הגדרת ממשק מפעל מופשט המכריז על שיטות יצירה עבור כל סוג של מוצר. שיעורי מפעל קונקרט ואז ליישם שיטות אלה כדי לייצר גרסאות מוצר ספציפיות.הלקוח משתמש רק במפעל מופשט ומממשקי מוצר מופשטים, המאפשר החלפת משפחות שלמות של אובייקטים מבלי לשנות את קוד הלקוח.
יסודות מרכזיים של התבנית
- (ב) ,0) ,Abstractrated FactoryFLT:1 - מכריז על שיטות יצירה עבור מוצרים מופשטים.
- (ב) ,0) ,Concrete FactoryFLT:1 - מיישמת שיטות ליצירת משפחה של מוצרים קונקרטיים.
- (ב) ,0) ,Abstractrated ProductFLT:1 - מכריז על ממשק לכל סוג של מוצר.
- (ב) ,0) ייצור המוצר (FLT:1) - יישום ממשק המוצר המופשט.
- (FLT:0)ClientveFLT:1) משתמש רק במפעל מופשט ומממשקי מוצר מופשטים.
יישום התבנית ב Java for Workflow Engines
כדי לבנות מנוע של זרימת עבודה אינטנסיבית עם תבנית המפעל הפשט ב Java, להתחיל על ידי מודל הרכיבים המופשטים.למטה הוא יישום מינימלי אך מאיור.
שלב 1: Define אבסטרקטיות
public interface Task {
void execute();
String getName();
}
public interface Transition {
boolean evaluate(WorkflowContext context);
String getTargetState();
}
public interface Workflow {
void start();
void stop();
String getStatus();
}
שלב 2: יצירת הממשק הפשטני
public interface WorkflowFactory {
Task createTask(String name, String type);
Transition createTransition(String source, String target, Condition condition);
Workflow createWorkflow(String id);
}
שלב 3: בניית מנגנונים
(ב) ,0) ,SimpleWorkflowFactoryFactoryFirLT:1 , מתאים לזרימות עבודה ליניאריות, נחיתות של עבודה עם קידוד בסיסי וביצוע מסונכרוני.
public class SimpleWorkflowFactory implements WorkflowFactory {
@Override
public Task createTask(String name, String type) {
return new SimpleTask(name);
}
@Override
public Transition createTransition(String source, String target, Condition condition) {
return new SimpleTransition(source, target, condition);
}
@Override
public Workflow createWorkflow(String id) {
return new SimpleWorkflow(id);
}
}
(FLT:0) AdvancedWorkflowFactoryFactoryFalve:1) עבור תרחישים מורכבים הדורשים ביצוע סינכרוני, שבילי ביקורת, ומיזוג מותני עם אסטרטגיות הערכה מרובות.
public class AdvancedWorkflowFactory implements WorkflowFactory {
@Override
public Task createTask(String name, String type) {
return new AsyncTask(name, new AuditService());
}
@Override
public Transition createTransition(String source, String target, Condition condition) {
return new CompositeTransition(source, target, condition);
}
@Override
public Workflow createWorkflow(String id) {
return new StateMachineWorkflow(id);
}
}
שלב 4: קוד הלקוחות מתאחד רק עם המפעל הפשט
public class WorkflowEngine {
private WorkflowFactory factory;
public WorkflowEngine(WorkflowFactory factory) {
this.factory = factory;
}
public void buildAndExecuteWorkflow(String id) {
Workflow workflow = factory.createWorkflow(id);
Task task1 = factory.createTask("Validate", "validation");
Task task2 = factory.createTask("Process", "processing");
// ...
workflow.start();
}
}
עיצוב זה מאפשר ל- 5 (FLT:5) להישאר לא מודע לחלוטין אילו משימות קונקרטיות או מעברים הוא משתמש.שינוי המשפחה של רכיבי זרימת העבודה הוא פשוט כמו הזרקת יישום מפעל אחר - לעתים קרובות באמצעות הזרקת תלות או קבצי תצורה.
היתרונות של שימוש בתבנית המפעל הפשטנית במנועי זרימת העבודה
- (FLT:0)ExtensibilityFLT:1 - הוספת משפחה חדשה של זרימת עבודה (למשל, זרימת עבודה מיקרו-batch) דורשת רק מפעל קונקרטי חדש ושיעורי מוצר.
- (ב) כי כל המוצרים בתוך משפחה נוצרים על ידי אותו מפעל, הם עובדים יחד באופן טבעי.
- (ה) ⁇ :0) ⁇ לוגיקה הבריאה האובייקטיבית היא מרכזית.
- (FLT:0) ,TestabilityFLT:1) - מפעלים מנוק או מחסנים ניתן מוזרק עבור בדיקות יחידה, בידוד מנוע זרימת העבודה ממסד נתונים אמיתי או תלות בשירות.
יישומים אמיתיים ופניות חיצוניות
(הופנה מהדף [[1924]]]] [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]] ו[[1924]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]], [[1924]], [[1924]], [[1924]], [[[[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]], [[[[1924]], [[[[1924]]]]]], [[[[1924]]]]]], [[[[1924]]]]]]]]]] [[[[1924]]]]
לצליל עמוק יותר בטכניקות יישום ספציפיות של Java, המאמר של לינוקס:0Baeldung על מפעל אבסטר ב- JavaFLT:1 מציע מדריך מאגד.
הצעות מסחר ומתי להשתמש בתבניות חלופיות
תבנית המפעל הפשטנית היא חזקה אך לא תמיד הבחירה הנכונה.חשבו על ההפוחיות הבאות:
- (FLT:0) מורכבות מעצימה של מורכבות FLT:1 - הוספת סוגי מוצרים חדשים דורש עדכון ממשק המפעל מופשט וכל מפעל קונקרטי, אשר יכול להיות מדביק אם המשפחה של מוצרים משתנים לעתים קרובות.
- (ב) התפוצצותו של קת'רמב"א (הראשונה ל"ב) - כל משפחה חדשה מוסיפה מספר כיתות חדשות.
- (ב) [ה]] [ה] [ה]] [ה]] [ה]] [ה]]] [ה'] [ה']'[ה]']'[ה']'[ה']'[ה]']'[ה']'[ה']'[ה'[ה']']'[ה']']'[ה'[ה'[ה']']'[ה']']'[ה'[ה']']'[ה'[ה'[ה'[ה'[ה'[ה']'[ה'[ה'[ה']'[ה'[ה']']']']'[ה']'[ה'[ה']'[ה']']']']']'[ה'[ה']']'[ה'[ה']']']']']'[ה'[ה']'[ה'[ה'[ה'[ה']'[ה']']'[ה'[ה'['['[ה'[ה
אם מנוע זרימת העבודה שלך צריך לתמוך תריסר סוגים שונים של מוצרים משתנים באופן עצמאי, הממשק הקשיח של המפעל הפשט עשוי להפוך צוואר בקבוק.במקרים כאלה, לשקול שילוב זה עם FLT:0Prototype PatternsFLT 1 כדי לשכפל תצורה קיימת, או להסתמך על FLT:2Dependency הזרקת F-3LT עם ממריצים במקום היררכיה של מפעל.
בדיקות מתקדמות ל-Ready Engines
עקבו אחרי Lowency Throw Frameworks
ביישומים מודרניים של Java באמצעות Spring או ג'קרטה EE, ניתן לרשום את המפעל הבטון כדבורה, ומנוע זרימת העבודה יכול לקבל אותו באמצעות הזרקת בנייה. decouples זה אפילו בחירת המפעל מהמנוע עצמו, המאפשר תצורה של זמן ריצה באמצעות פרופילים או משתנים סביבתיים.
תמיכה בהגדרות עבודה Custom Workflow
ניתן להרחיב את המפעל הפשטי לקרוא הגדרות של זרימת עבודה חיצונית (למשל, JSON, YAML, או BPMN 2.0) וליצור את האובייקטים המקבילים.AFLT:8 עשוי לסווג קובץ BPMN וליצור את ה-FLT:9, FLT:10, ו-FLT:11 מקרים.
תוצאות Implications
מכיוון שמפעל הפשטי בדרך כלל יוצר אובייקטים על הביקוש, הוא יכול להציג פנים אם יצירת אובייקטים היא יקרה.חשב באמצעות בריכות אובייקטים בתוך המפעל קונקרטי למשאבים יקרים למידיט (למשל, חיבורי מסד נתונים או לקוחות HTTP).המפעל יכול גם להיות מוגן חוט באמצעות שימוש ב-FLT:12 כיס או שיטות יצירה מסונכרנות.
שילוב עם תבנית Prototype
כאשר זרמי עבודה שונים רק בפרמטרים קטנים (כגון ערכי זמן או כללי טיפול בשגיאות), השיבו אובייקט של יצירת אבטיפוס עשוי להיות יעיל יותר מאשר בניית חדש בכל פעם.המפעל יכול להחזיק רישום של אובייקטים ולהחזיר משובטים במקום מקרים חדשים.
מסקנה
(הופנה מהדף תלמוד ב') ב[[1924]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]], [[1924]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]]]]]]]]]]]], [[1924]]]]]]]]]]]]]]]] ו[[1924]]]]]]]], [[1924]]]]]]]]]]]]]]]] [[1924]]]]]]]]]]]]]]]]]]]]]] [[1924]]]]]]]]]]]]]] [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]]] [[1924]] [[1924]] [[1924]]]]]]]]]]]]]]]]]]]]]]]]]]]] [[1924]]]]]]]] [[[[1924]]]]]] [[1924]]]]]]]] [[1924]]]]]]]] [[1924]]]]]]]] [[1924]]]]]]]]]] [[[[1924]]]]]]]] [[1924]] [[1924]] [[[[[[1924]]]]]]
כאשר הוא מיושם בזהירות, עם מודעות של חילופי הסחר חלופות מתאימות, תבנית המפעלים הפשט מבטיחה כי מנוע זרימת העבודה שלך יכול להתפתח לצד שינוי דרישות עסקיות, צמצום החוב הטכני ומאפשר לצוותים לספק תכונות מהר יותר.