从这里查看这段代码:
[Serializable]
public class CreateClientCommand : Command
{
public string ClientName { get; private set; }
public string Street { get; private set; }
public string StreetNumber { get; private set; }
public string PostalCode { get; private set; }
public string City { get; private set; }
public string PhoneNumber { get; private set; }
public CreateClientCommand(Guid id, string clientName, string street, string streetNumber, string postalCode, string city, string phoneNumber) : base(id)
{
ClientName = clientName;
Street = street;
StreetNumber = streetNumber;
PostalCode = postalCode;
City = city;
PhoneNumber = phoneNumber;
}
}
此处的指南仅与命令相关。它不是(可能)创建的聚合根的 Guid。获取此 Guid 的最佳实践是什么?任何潜在的验证错误如何传达回将命令置于总线上的代码?例如像这样:
_bus.Publish(new CreateClientCommand(
Guid.NewGuid(),
_clientDetailsReport.ClientName,
_clientDetailsReport.Street,
_clientDetailsReport.StreetNumber,
_clientDetailsReport.PostalCode,
_clientDetailsReport.City,
_clientDetailsView.PhoneNumber));
_bus.Commit();
我了解 CQRS 通常实现最终一致性。这意味着在实际创建客户端之前可能需要一段时间。一些 MVC/CQRS 代码使用这种方法:
[HttpPost]
public ActionResult Add(DiaryItemDto item)
{
ServiceLocator.CommandBus.Send(new CreateItemCommand(Guid.NewGuid(),item.Title,item.Description,-1,item.From,item.To));
return RedirectToAction("Index");
}
显然,索引页面可能会显示一些包含 DiaryItems 的网格,并且用户可能能够看到最新创建的 DiaryItem(一段时间后的可能性)。任何反馈将不胜感激。谢谢。