اکثر ما برنامه نویس ها وقتی واژه Enum را میشنویم یاد مثال معروف فصل های سال یا رنگهای رنگین کمان میافتیم یا اگر کمی با تجربه تر باشیم یا در چند مصاحبه تخصصی برای شرکتهای مختلف شرکت کرده باشیم میدانیم که کاربرد دیگر این نوع داده در مبحث Singleton Design Pattern و پیادهسازی این دیزاین پترن با Enum هاست ( اگه علاقهمند بودید به این مقاله نگاهی بندازید ).
اما من در این پست کوتاه وبلاگی قصد دارم در مورد کاربرد Enum ها در یک داخل یه پروژه واقعی صحبت کنم امیدوارم مفید باشه و اگه جایی فکر میکنید راه رو اشتباه رفتم یا میتوانستم بهتر قدم بردارم و مسأله رو بهینهتر حل کنم خوشحال میشم راهنماییم کنید.
فرض کنید پروژه جاری، اصولی و طبق اصول مهندسی سیستم تحلیل و طراحی شده و موجودیتهای سیستم و زیر سیستمها و فرایندها و سناریوهای آنها به صورت نمودارهایی کامل استخراج شده ( قبول دارم سیستم همیشه در حال تغییره و حتی تا مرحلهای از توسعه نرمافزار بسته به نوع متدلوژی هایی که انتخاب میکنیم همه موارد گفته شده چه موجودیتها ، چه سناریوها و چه رول ها و قوانین قابل تغییر هستند و اعمال تغییرات در طی این فرایند قابل قبول و کم هزینه تر هست ) .
حال شما به عنوان برنامه نویس و توسعهدهنده ( نه صرفاً کد زن و کد کپی کن ) نمودارهایی در اختیارتان قرار دارد و از شما خواسته میشود تا بیزنس این نمودارها پیادهسازی شود.
حال به این سؤالات جواب بله / خیر بدهید لطفاً !
نمودار در اختیار شما یک Sequence Diagram هست؟ یه دیاگرام خیلی پر اکتور / موجودیت ؟ و هر اکتور / موجودیت شما دارای کلی state مختلف با کلی اما و اگر و قید شرط برای رفتن از یک State به state دیگر ؟
آیا شما یک موجودیتی در سیستم دارید که بنا بر شرایط مختلف ، حالتهای گوناگونی به خود میگیرد و یک فرایند چندین مرحلهای طی میکند تا به انتهای داستان برسد ؟
حرفام کمی مبهمه بزارید با مثال جلو برم فرض کنید شما یک سناریوی ثبت سفارش و خرید دارید داستان از یک جایی شروع میشود مثل خط تولید یک کارخونه از زیر دست افراد / موجودیت های مختلف عبور میکند در طی مسیر اسمش از X به Y و Z تغییر میکند و حین این تغییر معنی متفاوتی پیدا میکند (مثلا لیست سفارش --> فاکتور ) یا توی بخش اتوماسیون اداری پرونده شما مراحل مختلفی طی می کنه تا تکمیل بشه.یا مثالی جدید تر، درخواست یافتن نزدیکترین تاکسی به شما در سیستمهای سرویس آنلاین تاکسی که داستان از فرایند ثبت درخواست شما (به عنوان مشتری و کاربر اپلیکیشن ) شروع میشود تا یافتن نزدیکترین تاکسی ها و ارسال درخواست شما به آنهاو گرفتن پاسخ از آنها و برگرداندن مشخصات مکانی- شخصی یکی از رانندگانی که اعلام آمادگی کرده برای سرویس دهی به شما و هندل کردن اکسپشن ها و حالتهای غیر عادی که حین اجرای این چرخه رخ میدهد و خلاصه بلاهایی که حین این فرایند سر درخواست شما میآید تا نهایت درخواست شما بسته شود (مثلاً با صدور یک فاکتور معادل درخواست شما ) . در همه این مثال ها ، حالتها را میتوان با یک / چند Enum نمایش داد.
در مثال زیر یک نمونه عینی آوردم :
public enum RequestState {
SENT_FROM_X(0),
SENT_TO_Y(1),
ACCEPTED_BY_Y(2),
CANCELED_BY_X_WHEN_SENT_TO_Y_THEN_CLOSED(3),
NOT_FOUND_X_THEN_CLOSED(4),
CLOSED_BY_SYSTEM(5),
FAIL_TO_SEND_MESSAGE_TO_X(6)
}
اینها بلاهایی هست که سر یک درخواست نمونه (هر چیزی میتونه باشه این درخواست ) می تونه بیاد
دقت کنید توی این فرایند ،موجودیت های مختلفی نقش ایفا میکنند و باهمدیگه برهم کنش دارند درهرکدام از آنها از یک state به state دیگر رفتن ،میتواند شامل چندین متد کال کردن باشد.
نکته دیگری که باید بهش توجه کنیم این است که درسته ترتیب زمانی در کل این فرایند داریم ولی زمان رخ دادن هر یک از رویدادها میتوانددر هر نقطهای از زمان باشد ما فقط میگیم اگر وضعیت درخواست در فلان حالت بود حتماً فلان کار را انجام بده .
این یک مثال عینی بود که بنده حین توسعه یک پروژه از Enum ها استفاده کردم و به نظرم خیلی بهم در حل مساله کمک کرد و خواستم اینو با شما دوستان برنامه نویس به اشتراک بزارم