نحوه رفرنس دادن انتیتی های یک اگریگیت داخل یک اگریگیت دیگر

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

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

بازدید: 259

پاسخ: 5

تگ: Asp.net Core


سلام استاد اشرافی عزیز، استاد یه سوال داشتم درباره رابطه بین اگریگیت ها، من الان انتیتیه product ام، یه سری specification کاستومه خودش رو میتونه داشته باشه، و یه سری specification هم از دسته بندی (کتگوری) ای که داخلش هست براش ثبت میشه، حالا من میخوام این 2 تا مشخصاته محصول جدا از هم باشه پراپرتی هاشون، چون مدل هاشون فرق میکنه، مثلا من میخوام مشخصات کتگوری رو بگیرم یجای خاصی از صفحه نشون بدم ولی مشخصات کاستومه محصول رو مثلا یجای دیگه، یعنی من میخوام انتیتیه محصول داخلش یجورایی پراپرتی داشته باشه این شکلی: List<CategorySpecification> CategorySpecifications ولی خب کتگوری کلا یه اگریگیت دیگست، و من نمیتونم اینجوری داخل اگریگیت پروداکت بهش رفرنس بدم، الان من چیکار کنم، چجوری مشخصات کتگوی و مشخصات کاستومه محصول رو تو 2 تا پراپرتی جدا قرار بدم؟

 

بعد یه سوال دیگه، این کار درسته که الان مثلا محصول، یه رفرنس توسط آیدی داشته باشه به یه انتیتی که زیر مجموعه یه اگریگیت دیگست، مثلا به آیدی های CategorySpecification که اون خودش تو اگریگیت Category هست، این کار درسته تو DDD؟ رفرنس با ابجکت نیست، فقط با آیدیش.

پاسخ ها
user

محمد اشرافی

سلام سلامت باشید 

شما یه CategorySpecification دارید که کاملا جداست ، حالا باید product به این شکل باشه : 
ProductCustomSpecification

ProductCategorySpecification

 

class ProductCategorySpecification{
	ProductId;
	CategorySpecificationId;
	Key ( این رو میتونید دریفت نکنید و توی کوری گرفتن از دیتابیس بگیرید اش )	
	Value ( این هم مقداری ه که براش ست کردین )
}

اگر که Object Refrence نباشه مشکلی نداره

user

bzmind ‌

خیلی ممنون استاد. بعد الان هر پراپرتی ای توی اون انتیتیه CategorySpecification باشه، باید توی این انتیتی جدید هم کپی کنم؟ یکم انگار کد داره کپی کاری میشه، ینی تکرار صورت میگیره، فک کنم بد باشه درسته؟ مثلا بعدا اون انتیتی CategorySpecification تغییر کرد، این انتیتی ProductCategorySpecification هم باید تغییر کنه، جدا از اون، انگار ما اومدیم همون انتیتی رو کپی کردیم اینجا، فقط اسمشو عوض کردیم. اینا بر خلاف DDD نیست؟

user

محمد اشرافی

بله درسته باید تقریبا کپی اون رو اینجا داشته باشید 

یه بحثی توی طراحی نرم اقزار هست که برای به دست آوردن هر چیزی یه چیز دیگه رو از دست میدیم ، توی طراحی ها باید  Coupling و Cohesion رو کنترل کنیم و این 2 مورد کاملا با هم تضاد دارن هر چه قدر Coupling بالا بره Cohesion پایین میاد و بر عکس ، حالا باید تصمیم گرفت چه قدر از کدوم رو باید استفاده کرد

 

شما توی این مورد دارین Coupling کاهش میدین ولی در مقابل Cohesion  بالا میره

پس باید تصمیم بگیریم میخوایم کدوم رو بیشتر یا کمتر داشته باشیم و وقتی می یایم Domain رو به صورت Aggregate پیش میبریم پس تصمیم گرفتیم توی لایه Domain ، وابستگی کمی داشته باشم و این وابستگی کم ممکنه باعث کد بیشتر بشه ولی چیزیه که انتخاب کردیم و در مقابل این رو به دست میاریم که هر کس مسئول کار خود اش هست

-------------------------------------

 

user

محمد اشرافی

اینو بزنید توی اینترنت تا بیشتر درمورد اش اطلاعات به دست بیارید : 
-----------

Cohesion and Coupling چیست

user

bzmind ‌

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

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

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