در چندین مقاله قبلی، من به طور مفصل تفاوت های ظریف مختلف سازماندهی کد را در یک پروژه قدیمی و پیچیده قدیمی با استفاده از روش طراحی Domain-Driven توضیح دادم. امروز، میخواهم درباره موضوع دیگری که در هنگام توسعه این سیستم با آن مواجه شدم بحث کنم – مدیریت مسائل همزمان.
برای جمعبندی، پروژه ما فرآیندهای تدارکات شرکتهای بخش B2B را خودکار کرد. این سیستم از انواع مختلفی از رویههای معاملاتی پشتیبانی میکرد که سازماندهندگان میتوانستند به صورت آنلاین با استفاده از تنظیمات انعطافپذیر انجام دهند. شرکت کنندگان پیشنهادات و پیشنهادات خود را ارسال کردند و برگزارکننده آنها را برای انتخاب بهترین گزینه و امضای قرارداد با برنده تجزیه و تحلیل کرد. این رویکرد نه تنها فرآیند تدارکات را ساده کرد، بلکه کارایی آن را نیز از طریق اتوماسیون و افزایش رقابت به میزان قابل توجهی افزایش داد.
معماری پروژه بر اساس اصول DDD سازماندهی شد و شامل چهار لایه بود:
- کد مشتری – چارچوب، کنترلرهای API خارجی، نماها
- لایه کاربردی – API داخلی برای کار با دامنه، سازماندهی شده بر اساس الگوی Command
- دامنه – تمام منطق تجاری برنامه، جدا از سایر لایه ها
- زیرساخت – پشتیبانی از کدهایی که عملکرد لایه های فوق را تضمین می کند: ذخیره سازی مداوم داده ها، صف ها، رویدادهای یکپارچه سازی
موجودیت اولیه در این سیستم…