Command definition

سوال شده توسط: گورگیز الیه

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

بازدید: 263

پاسخ: 6

تگ: Asp.net Core


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

مثال :
; public record AddFinancialPersonCommand(long Id, Financial Financial) : IBaseCommand
که با آیدی فرد مدنظر رو پیدا کنم و بعد امورمالی که تازه ساخته شده یا از Query گرفته شده رو به لیست امور مالی اون فرد اضافه کنم.

پاسخ ها
user

محمد اشرافی

منظورتون رو درست متوجه نمیشم ولی فرقی نداره توی command چی دریافت کنید ، در نهاییت این aggregate Root ه که باید دیتارو مدیریت کنه و اضافه شون کنه

مثال : 

public class Course:AggregateRoot
{
	public List<CourseSection> Sections {get;set;}
	
	public void AddSection(Section section)
	{
		//Add Section
	}
	public void AddEpisodeToSection(Episode episode)
	{
		var section=Sections.FirstOrDefault(f=>f.Id==episode.SectionId);
		if(section==null)
			return;
			
		section.addEpisode(episode);
	}
}
public class CourseSection:Entity
{
	public List<Episode> Episodes {get;set;}
	
	public void AddEpisode(Episode episode)
	{
		//logic
		
		Episodes.add(episode);
	}
}
public class Episode:Entity
{

}
user

گورگیز الیه

ببخشید فکر کنم سوال رو خوب مطرح نکردم
ساده بخوام بگم دقیقاًً همین مثالی که زدید فقط هر دو موجودیت از نوع AggregateRoot هستند.

پس این که یک موجودیت از نوع AggregateRoot رو میتونیم بعنوان ورودی Command یه AggregateRoot روت دیگه بدیم. و کارمون هم اصولی هستش. درسته؟


دلیل بوجود اومدن سوالم این بود که توی پروژه فروشگاه شما توی Domain خود موجودیت Address رو به ورودی AddAddress برای User قرار دادید ولی توی Application برای Command اضافه کردن Address به User مقادیری که به ورودی دادید، همون مقادیر تابع سازنده Address بودن.
برای همین این سوال برای من به وجود اومد که آیا کاری که من میخوام بکنم اصولی نیست؟ یا صرفاً بخاطر نحوه پیاده سازیه؟

چون من سعی میکنم اصول کد نویسی رو هم در کنار یادگیری برنامه نویسی یاد بگیرم.

user

محمد اشرافی

آها الان منظورتون رو گرفتم

  1. نه این کار خیلیی اشتباهی ه که از مدل های ِDomain برای ورودی command استفاده کنیم ( نه به عنوان ورودی و نه به عنوان خروجی نباید از مدل های domain استفاده کرد )
  2. اون کلاس Command که میسازیم نماینده اون use Case ه ، و به هیچ عنوان لایه وب کاری با مدل های domain نداره صرفا با command ها و query ها کار داره
  3. مدل های دامین صرفا برای منطق و هسته ی اصلی برنامه استفاده میشه که بتونیم اطلاعات رو به خوبی مدیریت کنیم 
user

گورگیز الیه

پس در این صورت اگر من بخوام موجودیت رو از Query بگیرم و به Command بدم، باید تک تک property های اون رو توی ورودی Command قرار بدم و نمیتونم مستقیماً خود موجودیت رو به ورودی بدم. درست متوجه منظورتون شدم؟

user

محمد اشرافی

بله درسته (Query هم نباید اون موجودیت رو برگردونه باید Dto برگردونه)

user

گورگیز الیه

بسیار عالی، خیلی ممنون بخاطر وقتی که برای پاسخگویی گذاشتید.

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

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