کلمه Entity را در زبان فارسی اغلب به موجودیت ترجمه میکنند اما من به شما توصیه میکنم که از ترجمه کردن این کلمات خودداری کرده و کلمه انگلیسی آنها را استفاده کنید و با آنها آشنا شوید. این موضوع در رابطه با مفهوم Value Object که در قسمت قبل بررسی شد نیز صدق میکند.
حال بیاید در رابطه با مفهوم یک Entity صحبت کنیم. در Tactical DDD یک Entity یک Object است که هویت و یا Identity آن اهمیت دارد. برای اینکه بتوانیم Identity و یا هویت یک Entity را مشخص کنیم از یک شناسه و یا ID منحصر به فرد و یا Unique استفاده میکنیم که در زمان ایجاد شدن یک Entity به آن اختصاص داده شده و در کل طول حیات یک Entity بدون تغییر باقی می ماند. زمانی که دو Entity از یک Data Type یکسان باشند و مقادیر موجود در ID آنها برابر باشد، آن دو Entity را یکسان میدانیم، حتی اگر مقدار درون پروپرتی های آنها متفاوت باشد. این موضوع میتواند در مقایسه با Value Object ها در نظر گرفته شود که در آنها زمانی دو Value Object برابر هستند که مقادیر درون پروپرتی هایشان تناظر یک به یک داشته باشد.
علاوه بر این زمانی که دو Entity از یک نوع داده ای و یا Data Type یکسان تعریف بشوند و مقادیر درون پروپرتی های آنها نیز یک به یک برابر باشند اما ID های متفاوتی داشته باشند، آن دو Entity یکسان در نظر گرفته نمیشوند.
در مقابل Value Object ها مفهوم Entity در Tactical DDD به صورت Mutable و یا قابل تغییر تعریف میشود. البته دقت کنید که نیازی نیست که برای تمام پروپرتی ها Setter تعریف کنیم. به عبارت دیگر اگر یک Entity قرار است Mutable باشد این بدان معنا نیست که تمامی پروپرتی های درون آن Entity باید قابلیت Set شدن را داشته باشند. بهتر است مکانیزم تغییر دادن درون پروپرتی ها در قالب متدهایی که به Business Operation های مربوط به حوزه و یا دامنه و یا Domain شما نگاشت میشوند پیاده سازی شوند. این روش مزایای بسیاری دارد. اگر که از این روش استفاده نکنید و برای تغییر مقادیر درون پروپرتی های یک Entity صرفاً به تعریف Setter برای آن پروپرتی ها بسنده کنید، میتوانید مقدار آن پروپرتی ها را به راحتی تغییر بدهید، اما دلیل تغییر دادن آنها را نمیتوان متوجه شد.
منبع: وبسایت پرووید