控制器对MVC应用程序的DDD责任

时间:2017-09-25 15:00:05

标签: rest model-view-controller domain-driven-design ddd-service

我正在为DDD重构一个应用程序,到目前为止一直很好,但我对某些责任有疑问,以及解决它的最佳方法是什么。

该应用程序是呼叫中心代理使用的Web应用程序,使用CRM功能,后端是REST API。

用例如下:代理商呼叫客户并需要收集一些信息/优惠促销等。 在打电话给客户并与他交谈之后,他需要为此联系尝试填写一些信息,其中一些信息是组合框,其中包含从数据库填充的数据,并且它将具有实体ID的POST发送到端点以进行注册它

所以我们有一个端点contactAttempt接收数据,customerId,agentId,一些组合框信息(subjectId,reasonId,extraInfo1,extraInfo2),额外的信息不会调用它,只是为了简化。

该信息被反序列化为传递给应用程序服务的DTO对象,该对象咨询相应的存储库以检查id是否有效并返回实体,如果找不到实体,则抛出控制器的异常用一条消息抓住并回答客户。

如果所有实体都有效,则会有一些域规则,例如第一次与客户联系,发送欢迎电子邮件以及其他内容。

我怀疑这是从存储库中获取实体的步骤,它应该是那样的,或者我应该在控制器中获取它,如果我需要的只是存在,那么我只用逻辑传递给域服务需要应用业务规则吗?

  • 上述方法的优点和缺点是什么?
  • 还有其他方法吗?
  • 在MVC的上下文中,Controller的责任是什么?

1 个答案:

答案 0 :(得分:1)

MVC负责在“应用程序层”的消息中反序列化HTTP请求。

因此它应该从querystring / body / headers获取所需的所有值,并作为不可变值(命令)传递给服务。这是因为应用程序服务(处理程序,无论如何)应该以事务方式执行命令,并且如果在应用程序层之外访问实体(因此,行为),则无法确保在应用程序层之外不会发生任何修改。