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، در حالی که فقط مقدارش اهمیت دارد.
