CodeShot
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٪
این مطلب مفید بود؟
نشان کردن
مشاهده در Concept Hub ←