我开始使用CQRS,并认为在我的表单上使用Command对象作为模型最有意义。我可以利用DataAnnotations,客户端验证的命令的一些客户端验证,使它非常干净......
我的问题......这会引起任何问题吗?如果我的命令没有默认构造函数,这会使这个过程变得不可能吗?我是否需要创建自己的CommandModelBinder,构造函数可以注入聚合ID?
你的想法,我无法在任何地方找到这种技术,我假设因为它不起作用。
答案 0 :(得分:5)
我建议您在基于任务的UI上查看Greg Young的article,了解DTO和消息如何与您的系统(客户端和服务器端)进行交互。
我同意Sebastian的观点,即您的命令将与您的用户界面完全匹配。因此,您可能需要具有单独的DTO / Model类和命令。这真的不是一件坏事,因为你的模型真的是系统查询端的结果,而且实际上不应该是你发送到系统中的消息的完全重复。
此外,通过将命令与模型分开,您对Command构造函数的关注就会消失。您的控制器只是从客户端收集信息,构造命令然后提交它。
如果您开始使用CQRS,Greg的网站(cqrsinfo.com)非常好,特别是他的6 1/2 hours video。是的,它是6个半小时,但它确实是一个很好的介绍和概述CQRS的全部内容。它给了我很大的帮助。
希望这有帮助!
答案 1 :(得分:3)
使用POST将命令发送到域命令处理程序似乎是明智的。但它不太可能是您绑定接口的确切对象。界面中的命令(例如鼠标点击)将成为域命令(创建用户)。您的GUI最有可能绑定到Query的结果。
答案 2 :(得分:2)
由于您提到的原因,您将创建View Models,它基本上是您在客户端和服务器之间发送的dto。通过这种方式,您可以使用模型绑定,数据注释等所有mvc优点。在您的控制器中,您将创建命令并将命令发送到服务总线。
我认为这可以帮助您更好地区分问题,并且在我看来更容易进行测试。