CodeShot
Seniorسختی 3 از ۵· در 75٪ مصاحبه‌های این حوزه پرسیده شده

Entity و Value Object در DDD چه تفاوتی دارند؟

نشان کردن

پاسخ کوتاه

Entity هویت یکتا و پایدار در طول زمان دارد (حتی اگر مقادیرش تغییر کند)؛ Value Object فقط با مقدارش تعریف می‌شود و هویت مستقلی ندارد.

پاسخ کامل

دو نمونه Address با آدرس یکسان از نظر DDD "برابر" و قابل‌جایگزینی‌اند (Value Object). اما دو Order با همان مقادیر یکسان، اگر Id متفاوت داشته باشند، دو موجودیت کاملاً متفاوت‌اند (Entity) — چون Order می‌تواند در طول زمان (تغییر وضعیت، افزودن آیتم) تغییر کند و همچنان همان Order باقی بماند.

مثال کد

// Value Object: برابری بر اساس مقدار
public record Money(decimal Amount, string Currency);

// Entity: برابری بر اساس Id
public class Order { public Guid Id { get; } public OrderStatus Status { get; set; } }

نکته مهم

Value Objectها معمولاً Immutable (غیرقابل‌تغییر) طراحی می‌شوند تا اشتراک‌گذاری امن باشد.

اشتباه رایج

❌ دادن Id مستقل به یک Value Object مثل Money یا Address، در حالی که فقط مقدارش اهمیت دارد.