0

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

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

用例如下:代理打电话给客户,需要收集一些信息/提供促销等。在打电话给客户并与他交谈后,他需要为这次联系尝试填写一些信息,其中一些信息是组合的从数据库中填充数据的框,并将带有实体 ID 的 POST 发送到端点以注册它。

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

该信息被反序列化为传递给应用程序服务的 DTO 对象,应用程序服务咨询相应的存储库以检查 id 是否有效并返回实体,如果找不到实体,它会引发控制器捕获并回答的异常带有消息的客户端。

如果所有实体都有效,则有一些域规则,例如是否是第一次与客户联系、发送欢迎电子邮件等。

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

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

1 回答 1

1

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

所以它应该从查询字符串/正文/标题中获取所有需要的值并作为不可变值(命令)传递给服务。这是因为应用程序服务(处理程序等)应该以事务方式执行命令,并且如果实体(因此,行为)在应用程序层之外被访问,您不能保证在应用程序层之外不会发生任何修改。

于 2017-09-25T16:02:36.087 回答