تشخیص مکان یک انتیتی در لایه Domain

سوال شده توسط: bzmind ‌

تاریخ ثبت: ۱۴۰۰/۱۱/۰۹

بازدید: 935

پاسخ: 4

تگ: Asp.net Core


سلام استاد اشرافی عزیز

استاد توی یه پروژه فروشگاهی، مثلا وقتی کاربر میاد یه کامنت میزاره واسه یه محصول، الان ما باید یه انتیتی به اسم Comment بسازیم تو لایه دامنه؟ و بعد این انتیتی کامنت دقیقا باید کجا قرار بگیره، یعنی خودش یه aggregate root باشه، یا اینکه زیر مجموعه Customer aggregate یا Product aggregate باشه، در کُل وقتی بعضی از انتیتی ها موقعیتشون مشخص نیست، چجوری باید تصمیم بگیریم که این خودش اگریگیت خودش باید باشه یا زیر مجموعه اگریگیت های دیگه باشه، و اینکه اصلا یک انتیتی مثل کامنت ارزشش به قدری هست که خودش یک اگریگیت جدا داشته باشه؟

ممنون

پاسخ ها
user

محمد اشرافی

سلام ، در کل باید تجربه کنید تا بتونید تصمیم بگیرید چی رو کجا قرار بدین ، و همه چی برمیگرده به اهمیت و ماهیت اون انتیتی ، مثلا توی این مثال comment  این انتیتی هم میتونه زیر مجموعه Product باشه هم می تونه یک Aggregate جدا باشه 

چرا نمی تونه زیر مجموعه User باشه ؟ چون این وابستگیش به Product خیلیی بیشتره تا User و ماهیت کلی این انتیتی مربوط میشه به Product

حالا توی بعضی سناریو ها این کامت قراره روی هر Url ثبت بشه جای Product یا Article در این صورت میشه اینو کلا تبدیل کرد به یک Aggregate یا Module جدا 

برای باقی کارها هم اول به این توجه کنید که این Entity کار اش چیه ؟ دلیل اصلی ساختن اش چی بوده ؟ و بعد برید ببینید کجا بزارید اش عملکرد بهتری پیدا میکنه 

user

bzmind ‌

ممنون استاد که وقت میزارید و پاسخ میدید،

بعد یه سوال دیگه، یعنی ما توی دامنه مون هیچوقت یه انتیتی نداریم که به صورت مستقل باشه؟ یعنی عضو هیچ اگریگیتی نباشه و خودش هم اگریگیت روت نباشه برای خودش، یعنی یه انتیتیه خالی باشه تو سطح domain layer که مثلا Customer و Product هر دو ازش استفاده میکنن، همچین چیزی ممکنه؟ یا نه کلا هر انتیتی باید یا خودش اگریگیت روت باشه یا عضو یه اگریگیت دیگه باشه؟

بعد ممکنه که کامنت رو به عنوان یه وَلیو آبجکت ساخت؟ اگر نمیشه، دلیلش چیه؟

user

محمد اشرافی

  1. توی DDD مفهومی وجود داره به نام Aggregate که باید به این شکل Domain پیاده سازی بشه ، دلیل اینکه می خواید یه Entity بین 2 تا Aggregate      شیر (share ) بشه چیه ؟  هیچ چیزی وجود نداره که جلوی شما رو بگیره که این کار رو انجام ندین ، اگر نیازتون واقعا اینه انجام اش بدین (ولی واقعا اگر دید دیتابیسی نداشته باشید هیچ وقت این نیااز به وجود نمی یاد )

-------

  1. نه نمیشه - گفتیم که Value Object ماهیتی توی مدل کسب کار نداره فقط می تونه جزئی از Entity باشه - دلیل بعدی ایش هم اینه که نمی تونه id داشته باشه
user

bzmind ‌

خیلی ممنون استاد

برای ثبت پاسخ باید خود شوید

محبوب ترین مقالات