مکان ساختن آبجکت های لایه Domain موقع استفاده از CQRS
سلام
میخواستم بدونم ما وقتی میایم Command و CommandHandler هامونو میسازیم، بعد مثلا توی Command که به صورت record هست، میایم پارامتر هارو میگیریم از یوزر، حالا ما باید بیایم توی خود CommandHandler مثلا اون شی رو بسازیم و پاسش بدیم به لایه Domain یا مستقیم همون پارامتر ها رو پاس بدیم به لایه Domain بعد توی خود انتیتی، اون پارامتر هارو داخل یه متود بگیریم و ازش آبجکت مورد نیازمون رو بسازیم؟
یه مثال اگر تونستم توی پاسخ پایینی مینویسم.
3 پاسخ
- bzmind 20 فروردين ۱۴۰۱
مثلا اگر کامند ما مربوط به اضافه کردن یک آدرس جدید برای یوزر باشه:
public record AddCustomerAddressCommand(string CustomerId, string City) : IBaseCommand; public class AddCustomerAddressCommandHandler : IBaseCommandHandler<AddCustomerAddressCommand> { private readonly ICustomerRepository _customerRepository; public AddCustomerAddressCommandHandler(ICustomerRepository customerRepository) { _customerRepository = customerRepository; } public async Task<OperationResult> Handle(AddCustomerAddressCommand request, CancellationToken cancellationToken) { var customer = await _customerRepository.GetAsTrackingAsync(request.CustomerId); if (customer == null) return OperationResult.NotFound(); customer.AddAddress(request.CustomerId, request.City); await _customerRepository.SaveAsync(); return OperationResult.Success(); } } ====================================================================================================================================== // Domain Layer public class Customer { public List<CustomerAddress> Addresses { get; private set; } public void AddAddress(long customerId, string city) { var address = new CustomerAddress(customerId, city); Addresses.Add(address); } }اینجا وظیفه ساختن آبجکت CustomerAddress باید به عهده همون CommandHandler باشه یا توی خود انتیتی Customer انجام شه؟
و بعد مثلا متود AddAddress دیگه مستقیم یه شی CustomerAddress میگیره بجای اینکه آیدی بگیره و خودش آبجکتو بسازه:
public void AddAddress(CustomerAddress address) { Addresses.Add(address); }یا کلا اصلا فرقی نداره کجا باشه؟
- محمد اشرافی20 فروردين ۱۴۰۱
سلام روش بهتر همون مثال اوله ، توی Aggregate روت نمونه سازی بشه بهتره
- bzmind 20 فروردين ۱۴۰۱
ممنون استاد.
