【问题标题】:DDD Responsibilities of Controller on MVC application控制器在 MVC 应用程序上的 DDD 职责
【发布时间】:2017-09-25 15:00:04
【问题描述】:

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

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

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

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

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

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

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

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

【问题讨论】:

  • Mvc 与 DDD 不兼容
  • 另外,您指的是哪种服务?域服务?
  • 关于mvc,好吧,只考虑一个将接收请求的控制器,我说的是从db、控制器、应用服务或域服务中获取实体的逻辑放在哪里
  • @ConstantinGalbenu 为什么 DDD 与 DDD 不兼容?这对我来说听起来很奇怪......
  • @rascio 这个想法是 mvc 更适合表示层而不是域层。还有其他架构可以很好地与 DDD 方法配合使用。但是,您可以使用任何使域层没有任何依赖关系且没有任何 IO 调用的架构。

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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-11-29
    • 1970-01-01
    • 2016-08-13
    • 1970-01-01
    • 2021-12-31
    • 2013-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多