【发布时间】:2016-06-17 21:18:25
【问题描述】:
我是 DDD 的新手,我正在尝试找出一种使用 PUT 动词更新聚合的方法。
如果聚合中的所有属性都有私有设置器,那么很明显我需要为每个业务需求提供一组功能。举个例子
supportTicket.Resolve();
很明显,我可以使用/api/tickets/5/resolve 等端点来实现这一点,但是如果我想提供一种自动更新整个票证的方法呢?
例如,用户可以使用以下正文向/api/tickets/5 发出 PUT 请求
{"status" : "RESOLVED", "Title":"Some crazy title"}
我需要在 ApplicationService 中做这样的事情吗
if(DTO.Status != null && dto.Status == "RESOLVED")
supportTicket.Resolve();
if(DTO.Title != null)
supportTicket.setNewTitle(DTO.title);
如果是这种情况,并且更改工单标题有一些业务逻辑可以防止在工单得到解决时更改它,我应该在更新聚合时考虑某种优先级,还是我认为这完全错误?
【问题讨论】:
-
我认为这比 DDD 更像是 API 设计,但请查看这篇文章:thoughtworks.com/insights/blog/… - tl;dr;逃离 CRUD。
标签: c# asp.net-web-api2 domain-driven-design