نحوه رفرنس دادن انتیتی های یک اگریگیت داخل یک اگریگیت دیگر
سلام استاد اشرافی عزیز، استاد یه سوال داشتم درباره رابطه بین اگریگیت ها، من الان انتیتیه product ام، یه سری specification کاستومه خودش رو میتونه داشته باشه، و یه سری specification هم از دسته بندی (کتگوری) ای که داخلش هست براش ثبت میشه، حالا من میخوام این 2 تا مشخصاته محصول جدا از هم باشه پراپرتی هاشون، چون مدل هاشون فرق میکنه، مثلا من میخوام مشخصات کتگوری رو بگیرم یجای خاصی از صفحه نشون بدم ولی مشخصات کاستومه محصول رو مثلا یجای دیگه، یعنی من میخوام انتیتیه محصول داخلش یجورایی پراپرتی داشته باشه این شکلی: List<CategorySpecification> CategorySpecifications ولی خب کتگوری کلا یه اگریگیت دیگست، و من نمیتونم اینجوری داخل اگریگیت پروداکت بهش رفرنس بدم، الان من چیکار کنم، چجوری مشخصات کتگوی و مشخصات کاستومه محصول رو تو 2 تا پراپرتی جدا قرار بدم؟
بعد یه سوال دیگه، این کار درسته که الان مثلا محصول، یه رفرنس توسط آیدی داشته باشه به یه انتیتی که زیر مجموعه یه اگریگیت دیگست، مثلا به آیدی های CategorySpecification که اون خودش تو اگریگیت Category هست، این کار درسته تو DDD؟ رفرنس با ابجکت نیست، فقط با آیدیش.
پاسخ ها
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/50655e66-86e5-4e25-9c29-7f4f3980c193.jpg)
محمد اشرافی
سلام سلامت باشید
شما یه CategorySpecification دارید که کاملا جداست ، حالا باید product به این شکل باشه :
ProductCustomSpecification
ProductCategorySpecification
class ProductCategorySpecification{
ProductId;
CategorySpecificationId;
Key ( این رو میتونید دریفت نکنید و توی کوری گرفتن از دیتابیس بگیرید اش )
Value ( این هم مقداری ه که براش ست کردین )
}
اگر که Object Refrence نباشه مشکلی نداره
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/5048777e-423b-46c3-9968-a0ecc498e69d0955598345365.jpg)
bzmind
خیلی ممنون استاد. بعد الان هر پراپرتی ای توی اون انتیتیه CategorySpecification باشه، باید توی این انتیتی جدید هم کپی کنم؟ یکم انگار کد داره کپی کاری میشه، ینی تکرار صورت میگیره، فک کنم بد باشه درسته؟ مثلا بعدا اون انتیتی CategorySpecification تغییر کرد، این انتیتی ProductCategorySpecification هم باید تغییر کنه، جدا از اون، انگار ما اومدیم همون انتیتی رو کپی کردیم اینجا، فقط اسمشو عوض کردیم. اینا بر خلاف DDD نیست؟
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/50655e66-86e5-4e25-9c29-7f4f3980c193.jpg)
محمد اشرافی
بله درسته باید تقریبا کپی اون رو اینجا داشته باشید
یه بحثی توی طراحی نرم اقزار هست که برای به دست آوردن هر چیزی یه چیز دیگه رو از دست میدیم ، توی طراحی ها باید Coupling و Cohesion رو کنترل کنیم و این 2 مورد کاملا با هم تضاد دارن هر چه قدر Coupling بالا بره Cohesion پایین میاد و بر عکس ، حالا باید تصمیم گرفت چه قدر از کدوم رو باید استفاده کرد
شما توی این مورد دارین Coupling کاهش میدین ولی در مقابل Cohesion بالا میره
پس باید تصمیم بگیریم میخوایم کدوم رو بیشتر یا کمتر داشته باشیم و وقتی می یایم Domain رو به صورت Aggregate پیش میبریم پس تصمیم گرفتیم توی لایه Domain ، وابستگی کمی داشته باشم و این وابستگی کم ممکنه باعث کد بیشتر بشه ولی چیزیه که انتخاب کردیم و در مقابل این رو به دست میاریم که هر کس مسئول کار خود اش هست
-------------------------------------
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/50655e66-86e5-4e25-9c29-7f4f3980c193.jpg)
محمد اشرافی
اینو بزنید توی اینترنت تا بیشتر درمورد اش اطلاعات به دست بیارید :
-----------
Cohesion and Coupling چیست
![user](/_ipx/f_webp&q_50&blur_3&s_10x10/codeyad/assets/img/UserAvatars/5048777e-423b-46c3-9968-a0ecc498e69d0955598345365.jpg)
bzmind
خیلی ممنون استاد.