چرا موتورهای گردش کار از Extensibility تقاضا می کنند

برنامه های سازمانی مدرن باید به سرعت برای تغییر قوانین کسب و کار، تغییرات قانونی و انتظارات مشتری سازگار شوند.یک موتور گردش کار - جزء اصلی که اجرای وظیفه متوالی یا موازی را هماهنگ می کند - اگر سخت کد گذاری شده باشد، طراحی یک موتور گردش کار غیر قابل تنظیم به این معنی است که شما می توانید انواع کار جدید، منطق انتقال یا استراتژی های مداوم را بدون بازنویسی مجدد کد بزرگ، الگوی اجرایی، تنظیم کد، در حالی که چهار ابزار سفارشی از تمیز نگه داشتن یک الگوی کاربر را از سیم کشی تمیز نگه می دهد، ارائه می دهد.

درک الگوی کارخانه Abstract

الگوی کارخانه انتزاعی رابط ایجاد خانواده های اشیاء مرتبط یا وابسته را بدون مشخص کردن کلاس های بتنی خود فراهم می کند، به ویژه هنگامی که یک سیستم باید مستقل از چگونگی ایجاد محصولات آن، تشکیل شده و نشان داده شده است.در زمینه موتورهای گردش کار، شما معمولا چندین خانواده از اشیاء را تنظیم می کنید: [FLT: 1] واحد کار (F) ، و (F3)، که پردازش موازی (F3).

این الگو با تعریف یک رابط کارخانه انتزاعی کار می کند که روش های ایجاد برای هر نوع محصول را اعلام می کند. کلاس های کارخانه ای بتن سپس پیاده سازی این روش ها برای تولید انواع محصول خاص. مشتری تنها از کارخانه انتزاعی و رابط های محصول انتزاعی استفاده می کند که اجازه می دهد کل خانواده های اشیاء را بدون تغییر کد مشتری مبادله کند.

عناصر کلیدی الگوی

  • کارخانه ی [FLT:] [[۱]]] [[۳]]] [[۳]]]] [[۳]]]] [[۱]]]]]]] [[۱]]]] [[۱]]]]]] [[۳]]]]] [[۳]]] [۱]]]] [۱] [۱]]] [۶]]]] [۱] [۱]]] [۶]]]] [۱] [۱]]]]] [۱] [۱]]]]]]] [۱]]]]]] [۱]]]] [۱] [۱] [۱] [۱] [۱] [۱]]]]]] [۱] [۱]] [۱]]]]]] [۶] [۶] [۱] [۱]]] [۱] [۱] [۱]]]] [۱] [۱] [۱] [۱] [۶] [۶] [۱]]]]]] [۱] [۶]]] [۱]]
  • کارخانه ی دفع – روش های ایجاد را برای تولید یک خانواده از محصولات بتونی پیاده سازی می کند.
  • محصول ، رابط کاربری برای هر نوع محصول را اعلام می کند.
  • محصول دفع - رابط محصول انتزاعی را پیاده سازی می کند.
  • Client - فقط از کارخانه انتزاعی و رابط های محصول انتزاعی استفاده می کند.

پیاده سازی الگوی در جاوا برای موتورهای گردش کار

برای ساخت یک موتور گردش کار غیر قابل پیش بینی با الگوی کارخانه انتزاعی در جاوا، با مدل سازی اجزای انتزاعی شروع کنید.در زیر یک پیاده سازی حداقل اما تصویرسازی است.

مرحله 1: رابط های محصول انتزاعی را تعریف کنید

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();
}

مرحله دوم: رابط کارخانه Abstract را بسازید

public interface WorkflowFactory {
 Task createTask(String name, String type);
 Transition createTransition(String source, String target, Condition condition);
 Workflow createWorkflow(String id);
}

مرحله 3: ساخت کارخانه های بتنی

[FLT 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);
 }
}

] AdvancedWorkflowFactory [FLT 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: مشتری کد فقط با کارخانه Abstract

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();
 }
}

این طراحی اجازه می دهد تا به طور کامل از وظایف یا انتقال های بتنی که استفاده می کند، آگاه بماند. تغییر کل خانواده اجزای گردش کار به سادگی تزریق یک اجرای کارخانه مختلف است - اغلب از طریق وابستگی یا فایل های پیکربندی.

مزایای استفاده از الگوی کارخانه انتزاعی در موتورهای گردش کار

  • - اضافه کردن یک خانواده گردش کار جدید (به عنوان مثال، یک گردش کار میکرو) تنها نیاز به یک کارخانه بتن و کلاس های محصول جدید دارد.
  • سازگاری - از آنجا که تمام محصولات درون یک خانواده توسط همان کارخانه ایجاد می شوند، به طور طبیعی با هم کار می کنند.
  • قابلیت نگهداری - منطق ایجاد اشیاء متمرکز است.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.ک.
  • آزمون پذیری - کارخانه های Mock یا stub می توانند برای تست واحد تزریق شوند، موتور گردش کار را از پایگاه داده واقعی یا وابستگی های خدمات جدا کنند.

برنامه های کاربردی و خارجی

الگوی کارخانه انتزاعی به طور گسترده ای در چارچوب های سازمانی استفاده می شود، به عنوان مثال، نمودار بهار (FLT:6) و در اطراف یک الگوی کارخانه ساخته شده است که کتابخانه های شبیه به LT:LTLT] [FLT=LT1] و [F:2jBPM [F3] از اصول مشابه در الگوی پیکربندی کلاسیک استفاده می کنند.

برای یک شیرجه عمیق تر به تکنیک های پیاده سازی خاص جاوا، مقاله Baeldung در مورد کارخانه انتزاعی در جاوا ارائه می دهد یک آموزش مختصر علاوه بر این، refactoring Guru پوشش شامل نمونه های عملی و مقایسه با دیگر الگوهای خلقی است.

تجارت – اخراج و زمانی که از الگوهای جایگزین استفاده کنید

الگوی کارخانه انتزاعی قدرتمند است اما همیشه انتخاب درستی نیست.

  • افزایش پیچیدگی - اضافه کردن انواع محصول جدید نیاز به به به روز رسانی رابط کارخانه انتزاعی و هر کارخانه بتونی، که می تواند خسته کننده اگر خانواده از محصولات تغییر اغلب.
  • انفجار کلاس - هر خانواده جدید چندین کلاس جدید اضافه می کند.
  • [[FLT] [[ویرایش]] [FLT3]] [FLT3] [FLT] [FLT]] الگوی مکانیکی :5] یک رویکرد سبک تر است که شما به یک مدل کلی (FLT:6) نیاز دارید.

اگر موتور گردش کار شما نیاز به حمایت از ده نوع مختلف محصول دارد که به طور مستقل تغییر می کند، رابط سفت و سخت کارخانه انتزاعی ممکن است به تنگنا تبدیل شود.در چنین مواردی، ترکیب آن را با الگوی Prototype [FLT 1] برای کلون سازی تنظیمات موجود، یا تکیه بر Dependency تزریقی li با سلسله مراتب کارخانه به جای سلسله مراتب کارخانه]

بررسی های پیشرفته برای موتورهای تولید-Ready

ادغام با چارچوب های تزریق وابسته

در برنامه های مدرن جاوا با استفاده از بهار یا جاکارتا EE، کارخانه بتن را می توان به عنوان یک زنبور ثبت کرد و موتور گردش کار می تواند آن را از طریق تزریق سازنده دریافت کند.این جفت حتی انتخاب کارخانه از خود موتور، اجازه می دهد پیکربندی زمان از طریق پروفایل ها یا متغیرهای محیط.

پشتیبانی از تعریف های گردش کار سفارشی

شما می توانید کارخانه انتزاعی را برای خواندن تعاریف گردش کار خارجی (به عنوان مثال، JSON، YAML یا BPMN 2.0) گسترش دهید و اشیاء مربوطه را تولید کنید. A ممکن است فایل BPMN را تجزیه و تحلیل کند و (FLT:10، و [FLT: 11] این رویکرد، منطق اجرای موتور را از هم جدا می کند.

عملکرد Implications

از آنجا که کارخانه انتزاعی به طور معمول اشیاء را در تقاضا ایجاد می کند، می تواند سربار را معرفی کند اگر ایجاد شی گران باشد.در نظر داشته باشید که با استفاده از استخرهای شی در کارخانه بتن برای منابعی که هزینه آن برای فوری سازی است (به عنوان مثال اتصالات پایگاه داده یا مشتریان HTTP) کارخانه نیز می تواند با استفاده از caches یا روش های همگام سازی شده، امنیت را ایجاد کند.

ترکیب با الگوی Prototype

هنگامی که گردش کار تنها در پارامترهای جزئی (مانند مقادیر زمان بندی یا قوانین کنترل خطا) متفاوت است، جمع آوری یک شیء گردش کار نمونه اولیه ممکن است کارآمد تر از ساخت یک جدید در هر زمان باشد.کارخانه می تواند یک رجیستری از اشیاء نمونه اولیه را نگه دارد و به جای نمونه های جدید، کلون ها را برگرداند.

نتیجه گیری

الگوی کارخانه انتزاعی پایه محکم و زمان تست شده برای طراحی موتورهای گردش کار غیر قابل پیش بینی در جاوا را ارائه می دهد.با انتزاع اجزای گردش کار مرتبط - کار ، انتقال ساختار و Workflow [FLT5] - در حالی که شما نیاز به یک الگوی اضافی از کار دارید، و به عنوان یک سیستم قابل اطمینان و ساختار اضافی، توسعه می رسد.

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