Domain-Driven Design (DDD)؛ بخش چهارم: Bounded Contexts
نویسنده: وحید نصیری
تاریخ: ۱۴۰۴/۰۵/۳۰ ۰۸:۱۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
StockQuantity) نگهداری میکند.Price) نگهداری میکند.Catalog ----> Circulation <---- Membership
|
v
BillingCatalogDbContext فقط موجودیتهای کتابها و دستهبندیها را نگه میدارد.CirculationDbContext روی رکوردهای امانت متمرکز است.MembershipDbContext فقط با اعضا و وضعیت آنها سروکار دارد.BillingDbContext هم کار خودش را میکند.Book: کتاب با ویژگیهایی مثل عنوان، سال انتشار، ISBN.Author: نویسنده با نام و مشخصات پایه.Category: دستهبندی موضوعی کتابها.ISBN: یک شناسهٔ منحصربهفرد که خودش قواعد اعتبارسنجی دارد (مثلاً طول و الگوی معتبر).PublicationInfo: شامل ناشر و سال انتشار.Book بهعنوان ریشهٔ اصلی؛ چرا که Author یا Category میتوانند مستقل مدیریت شوند، اما در تعامل با امانتها، معمولاً کتاب واحد پایه است.Loan (یا BorrowingRecord): رکوردی که میگوید کدام عضو چه کتابی را کی گرفته.Reservation: درخواست رزرو یک کتاب.LoanPeriod: شامل تاریخ شروع و پایان.DueDate: تاریخ بازگشت مورد انتظار.Loan چون تمام قوانین (مثل تمدید یا دیرکرد) حول آن میچرخد.Reservation را یک Aggregate جدا در نظر گرفت، چون چرخهٔ زندگی خودش را دارد.Member: شخصی که عضو کتابخانه است.MembershipType: نوع عضویت (مثلاً سالانه، دانشجویی، ویژه).ContactInfo: شامل ایمیل، شماره تماس.Address: آدرس پستی یا محل سکونت.Member چون همهچیز (نوع عضویت، وضعیت فعال یا غیرفعال بودن) به او متصل است.Fine: جریمهٔ ایجاد شده برای دیرکرد یا خسارت.PaymentTransaction: ثبت پرداختها.Money: شامل مقدار و واحد پول.PaymentMethod: نوع پرداخت (کارت، نقدی، آنلاین).Fine (بهعنوان منبع بدهی).PaymentTransaction میتواند یک Aggregate مستقل باشد، چون چرخهٔ زندگیاش جدا از جریمه تعریف میشود.public class CirculationDbContext : DbContext
{
public DbSet<Loan> Loans { get; set; }
public DbSet<Reservation> Reservations { get; set; }
}// نقشهٔ سادهٔ روابط (Context Map)
+--------------------+
| Membership BC |
|--------------------|
| Member |
| MembershipType |
+--------------------+
^
| Validate member
|
+----------+-----------+
| |
| |
v v
+------------------+ +---------------------+
| Circulation BC | | Reservation BC |
|------------------| |---------------------|
| Loan | | ReservationQueue |
| LoanPolicy | | PickupWindow |
+------------------+ +---------------------+
| ^ ^
| | |
| |LoanReturned | consumes LoanReturned
| +-------------------------+
| checks ActiveReservation
v
+------------------+
| Billing BC |
|------------------|
| Fine |
| Payment |
+------------------+// Context map
+-------------------+ +-------------------+
| Billing Context |<----------->| Payment Context |
| (Issue Charge) | Supplier | (Pay Charge) |
+-------------------+ +-------------------+
|
| Conformist
v
+-------------------+
| Penalty Context |
| (Late Penalty) |
+-------------------+
^
| OHS / PL
|
+-------------------+
| ChargeQuery Ctx |
| (View Charges) |
+-------------------+//Context map
[User Management BC]
↑
│ (اطلاعات پایه بیمار/پزشک)
│
[Scheduling BC] ───────► [Billing & Payment BC]
│ (پرداخت بابت وقت رزرو شده)
│
(قلب سیستم: وقت ویزیت)