قبل از هر چیز:
این نوشته صرفا ترجمه خودمونی یه مقالهست از قسمت بلاگ سایت workflowengine.io با همین عنوان یعنی WORKFLOW ENGINE VS. STATE MACHINE.
چون من نمیدونم Workflow Engine و State Machine رو چی ترجمه کنم که درست باشه توی کل ترجمه از خود این کلمهها استفاده میکنم.
وقتی که شرکتها تصمیم میگیرند که یه سیستمی رو پیادهسازی کنند که بهشون کمک کنه که فرایندهای کسب و کارشون رو مدیریت کنند، انتخابشون معمولا بین یه Workflow Engine و یه State Machine خواهد بود.
هرچند که رفتار هر دو سیستم خیلی شبیه هم هست،ولی هر کدومشون چندتا ویژگی متمایز دارن. پس، لازمه که مزایا و معایب هر دو رو آنالیز کنیم تا بتونیم تصمیم بگیریم کدوم برای نیازهای شرکت ما مناسبتره.
در کل تفاوت این دو تا توی تمرکزشون نهفتهس. توی یه Workflow Engine انتقال به قدم بعدی وقتی انجام میشه که اکشن قبلی کامل شده باشه، در حالی که یک State Machine به یک رویداد خارجی نیاز داره تا موجب انشعاب به فعالیت بعدی بشه. به بیان دیگه، State Machine رویدادمحوره اما Workflow Engine نه.
برای اینکه بفهمیم کدوم سیستم رو انتخاب کنیم لازمه که چندتا از ویژگیهای عمدهشون رو بررسی کنیم.
انعطافپذیری
یک Workflow Engine زمانی که تسکها یکی بعد یکی دیگه انجام میشن از الگوی ترتیبی پشتیبانی میکنه. قدم بعدی توی workflow تا زمانی که قدم قبلی کامل نشده شروع نمیشه. مثال هم یک سندی که تا وقتی که توسط وکیل امضا نشده توسط رییس امضا نمیشه. نتیجه اینکه، به نظر میرسه Workflow Engine توی ماهیتش صلب و قطعیه. State Machine اما ناهمگام کار میکنه. چون قدمها توی State Machine با رویداد/اکشنهای مشخصی برداشته میشن، نمیشه گفت که قطعا به یه نظم دقیق انجام میشن. از این نظر State Machineها انعطافپذیری بیشتری دارن.
هرچند که، وقتی که شرکت یه نیازهای کاری جدید داره، وضعیت عوض میشه. یه State Machine رو تصور کنید که این سه تا وضعیت رو داره: درخواست دادن، پذیرفتن و نپذیرفتن درخواست. الان، ما میتونیم سه تا وضعیت رو ببینیم و خب انتقالهای واضح بین اونها رو. بعدا شما تصمیم میگیرید که چندتا وضعیت دیگه هم اضافه کنید، مثلا، ویرایش درخواست و دعوت کردن به ثبت بازخورد. اینجا تعداد وضعیتها و انتقالهای بینشون به طور قابل توجهی زیاد میشه. به علاوه، هنگام اضافه کردن وضعیتهای جدید، باید بدونید که نمیتونید یکی از اونها رو بدون شکستن بقیه تغییر بدید. در نتیجه بجای اینکه خیلی ساده چندتا عملکرد سیستم رو عوض کنید، خودتون رو توی موقعیتی میبینید که دارید یک سیستم جدید رو از پایه میسازید. به همین خاطر، وقتی که میبینید که قوانین کسب و کارتون ممکنه در طول زمان تغییر کنه ( که تقریبا اجتنابناپذیر هست) Workflow Engine گزینه بهتریه.
قابل درک بودن
در نگاه اول استفاده از State Machine ظاهرا ساده به نظر میاد. توسعهدهنده فقط لازمه که فرایندهای شرکت رو بررسی کنه و یک دیاگرامی رسم کنه از چندتا وضعیت، و رویدادهایی که باعث انتقال به این وضعیتها میشن.اما مشکل اصلی State Machine اینه که در عمل، فقط به درد بیزنسهایی با مشکلات تکبعدی میخوره. State Machine برای پروژههایی که چند وضعیت متمایز دارن خوب کار میکنه، اما وقتی که سیستم پیچیدهتری داشته باشیم دچار خطا میشه. یه CRM ساده که با State Machine ساخته شده ممکنه به مشکلاتی زیادی بخوره. بعد شما به انتقال وضعیتهای زیادی فکر میکنید، مثل ثبت یه مشتری جدید، شروع پروژه جدید یا لغو. به علاوه، هر کدوم از این وضعیتها میتونه به وضعیتهای جدید تقسیم بشه. مثلا، شما ممکنه بخواید یه دلیل برای لغو اضافه کنید یا اینکه اضافه کنید که یه مشتری جدید از طریق چه کانالی پیدا شده (ایمیل، تماس تبلیغاتی و غیره). وقتی که تلاش کنید این وضعیتهای جدید رو رسم کنید، سیستم به زودی غیرقابل مدیریت میشه.
ممکنه در نگاه اول Workflow Engineها خیلی پیچیده به نظر بیان، چون چندتا عنصر جدید باید پیاده بشن. اما برای سیستمهای بزرگتر این مناسبترین راه حله. وقتی که به خوبی پیادهسازی بشه، مزایا به پیچیدگیها میچربه. به نظر میاد Workflow Engineها برای مدیریت فرایندهای بیزنس مدل بهتری هستن.
استفاده از اونها برای سیستمهای مدیریت وظایف هم رایجه،به دلیل قابلیت اختصاصدادن سریع وظایف به مجریای مختلف. به علاوه، Workflow Engineها مستندات ثابتی دارن. یه توسعهدهنده جدید میتونه بدون صرف ساعتهای زیاد و بررسی کدهای بیپایان برنامه، سیستم رو راحت بشناسه.
خوانایی
همکاری افراد بیرون و درون شرکت برای توسعه کسب و کار لازمه. پس، یه پلتفورم مشترک که توسط شرکت استفاده میشه باید برای همه اعضا تمیز و واضح باشه. مدیرها باید بتونن ببینن که یه اکشن توی هر زمانی توی کدوم وضعیت بوده و هست.
معمولا State Machine خوانایی خوبی نداره. در هر لحظه فقط میتونه یک وضعیت رو نشون بده و امکان اجرای موازی رو نداره. پس وقتی که میخواید رویدادهایی رو معرفی کنید که ممکنه طبق شرایطی اتفاق بیوفتن، تعداد وضعیتهای شما دو برابر میشه. وقتی هم که تعداد وضعیتها خیلی زیاد بشه، خوانایی سیستم به صفر میل میکنه.
پیشبینیپذیری
در مقایسه با State Machineها، Workflow Engineها ذاتا قابل پیشبینیترن. اونها از شرایطی استفاده میکنن که همیشه از ابتدا تعیینشدهن. فرض کنید که شما نیازمند تایید اسناد توسط هردو نفر مدیر مستقیم و مدیر کل هستید. ممکنه سند توسط هر کدومشون اول امضا بشه. اگه یه Workflow Engine رو انتخاب کنید، این روند از قبل تعیین شدهست. مثلا اول مدیر مستقیم سند رو امضا میکنه، بعد مدیر کل. در نتیجه، مدیر کل سند رو نمیگیره تا وقتی که مدیر مستقیم امضاش کنه. این روند هم هیچوقت تغییر نمیکنه.
در یک الگوی State Machine، این کاربره که تصمیم میگیره که کدوم مدیر اول باید سند رو امضا کنه. در این مثال تصمیمها رو افراد میگیرن. اما وقتی State Machineها بدست عوامل بیرونی کنترل بشن، ممکنه رویدادهای مختلفی منجر به تکمیل شدن روند بشن. از این نظر، سود Workflow Engine بیشتره، چون شما رو توی کل روند هدایت میکنه.
اگر سیستم شما خیلی پیچیده نیست State Machine برای شما راه حل خوبیه. شما میتونید با مشخص کردن تمام وضعیتها و رویدادهای منتهی به وضعیتها، اون رو طراحی کنید. به طور کلی State Machineها برای پروتکلهای شبکه و بعضی از سیستمهای جاسازی شده خوب کار میکنن.
پیادهسازی Workflow Engine راه خوبیه برای مدیریت فرایند کسب و کار. راه حل خوبیه برای اختصاص وظایف، CRM و سیستمهای پیچیده دیگه. در کل، هدف غاییش بهبود فرایندهای کسب و کار شرکت شماس. همینم هست که برای اتوماسیون فرایند کسب و کار مناسبش کرده.