🧩 چگونه با استفاده از Domain Events سیستمهای Loosely Coupled بسازیم
در مهندسی نرمافزار، واژهٔ coupling (وابستگی) به این معناست که بخشهای مختلف یک سیستم نرمافزاری تا چه اندازه به یکدیگر وابستهاند.
اگر اجزا tightly coupled باشند، تغییر در یک بخش میتواند بر قسمتهای زیادی از سیستم تأثیر بگذارد.
اما اگر loosely coupled باشند، تغییر در یک بخش، باعث بروز مشکلات بزرگ در سایر قسمتها نخواهد شد.
✨Domain Events
یکی از الگوهای تاکتیکی
در Domain-Driven Design (DDD) هستند که به ما کمک میکنند تا سیستمهایی با وابستگی کم بین اجزا بسازیم.
میتوان یک Domain Event را از داخل Domain منتشر کرد که در واقع نمایانگر یک رخداد واقعی است.
سایر کامپوننتها در سیستم میتوانند به این Event مشترک شوند (subscribe) و آن را بر اساس منطق خودشان مدیریت (handle) کنند.
⚙️ Domain Event چیست؟
یک Event چیزی است که در گذشته اتفاق افتاده است.
✅ یعنی یک واقعیت (Fact) است.
✅ و غیرقابلتغییر (Unchangeable) است.
یک Domain Event چیزی است که در درون Domain رخ داده و سایر بخشهای Domain باید از آن آگاه شوند.
🎯 Domain Events
به شما این امکان را میدهند که Side Effectها را بهصورت صریح بیان کنید
و Separation of Concerns بهتری در Domain داشته باشید.
این الگو یک روش عالی برای تحریک (Trigger) کردن Side Effectها در میان چند Aggregate مختلف در درون Domain است.
⚠️ اما یک نکته مهم:
شما به عنوان توسعهدهنده باید مطمئن شوید که انتشار (Publishing) یک Domain Event بهصورت تراکنشی (Transactional) انجام میشود.
در ادامه خواهیم دید که چرا این کار به این سادگیها هم نیست! 😅