asp.net-mvc - CQRS中创建聚合根的指导

标签 asp.net-mvc domain-driven-design cqrs ncqrs

查看 here 中的代码:

[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。获取此 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(一段时间后可能会出现)。任何反馈将不胜感激。谢谢。

最佳答案

您是否想了解命令本身的 ID 与它可能创建的实体的 ID 之间的区别?前者通常是基础设施问题,可以在消息信封、埋藏在 RPC 协议(protocol)等中找到。后者将是您的域的一部分。 (尽管在许多情况下,最好将实体的 ID 也视为基础设施问题,因为您可能会为了持久性模型中的方便而选择它。)

关于asp.net-mvc - CQRS中创建聚合根的指导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24383942/

相关文章:

c# - Autofac 解决 CQRS CommandDispatcher 中的依赖关系

c# - 通过 ssl 调用 web 服务并使用客户端传递

jquery.autocomplete 在兼容模式下不起作用

domain-driven-design - CQRS 和事件溯源 - 保存命令而不是事件?

oop - 如何正确创建具有循环依赖性的两个实体?

asp.net-mvc - 帖子和评论应该在帖子聚合中还是应该是它们自己的聚合?

design-patterns - 如果发生任何故障,Saga 模式是否能够帮助逆转支出?

sql - 获取自上次检查后插入的行?

asp.net-mvc - 为什么MVC提供的Default AccountController中有2个构造函数?

c# - 存储库模式是否遵循 SOLID 原则?