Domain Driven Design (DDD)2 دقیقه مطالعه
Domain-Driven Design (DDD) چیست؟
DDD مدل کد را مستقیماً از زبان و قواعد واقعی کسبوکار میسازد، نه از ساختار جداول دیتابیس.
چرا مهم است؟
در آگهیهای Senior .NET بسیار پرتکرار است و پایهٔ معماریهای تمیز مثل Clean/Onion Architecture محسوب میشود.
مفاهیم کلیدی
- Entity: شیء دارای هویت یکتا که در طول زمان تغییر میکند (مثل
Order). - Value Object: شیء بدون هویت که فقط با مقدارش شناخته میشود (مثل
Money,Address). - Aggregate: گروهی از Entity/Value Object که یک واحد سازگاری (Consistency) را تشکیل میدهند؛ فقط از طریق ریشهٔ آن (Aggregate Root) تغییر میکنند.
- Bounded Context: مرز مشخصی که یک مدل دامنه در آن معتبر است (مثلاً "Customer" در ماژول فروش میتواند با "Customer" در ماژول پشتیبانی معنای متفاوتی داشته باشد).
- Ubiquitous Language: واژگان مشترک بین تیم فنی و متخصصان کسبوکار که مستقیم در نام کلاسها/متدها استفاده میشود.
مثال Aggregate Root
public class Order // Aggregate Root
{
private readonly List<OrderLine> _lines = new();
public void AddLine(Product product, int qty)
{
if (qty <= 0) throw new DomainException("تعداد باید مثبت باشد");
_lines.Add(new OrderLine(product, qty));
}
}
اشتباه رایج
❌ استفاده از DDD برای یک CRUD ساده بدون منطق کسبوکار پیچیده — پیچیدگی اضافه بدون فایدهٔ واقعی. ✅ DDD برای دامنههای پیچیده با قواعد کسبوکار غنی (فروش، بیمه، بانکداری) بیشترین ارزش را دارد.
خلاصه
DDD مدل کد را از زبان و قواعد واقعی کسبوکار میسازد؛ Aggregate Root تنها نقطهٔ ورودی برای تغییر یک گروه از Entityهاست؛ برای دامنههای ساده، DDD معمولاً پیچیدگی غیرضروری اضافه میکند.
حالا امتحان کن
🧩آزمون مبانی DDD3 سؤال · نمره قبولی 60٪این مطلب مفید بود؟
☆نشان کردن