关于与其他域的交互的困惑

时间:2016-07-16 09:12:49

标签: domain-driven-design command-query-separation hexagonal-architecture

我们正在为全新domain model(和Bounded Context)'Appointment'创建新的应用程序。我们选择将CQSHexagonal Architecture(使用端口和适配器)合并到我们的新域中。

我们的包结构主要如下所示:

.appointments
  .application
    .command
    .representation
    - AppointmentScheduleApplicationService.java
    - AppointmentScheduleQueryService.java
  .domain.model
  .port.adapter
    .integration
    .persistence
    .web
    .service
      - AppointmentScheduleFacade.java

我的问题:

  1. 这个包结构对于我们想要实现的目标是否正常?
  2. 我们希望通过以下方式查看与其他域之间的每次通信 AppointmentScheduleFacade界面。跨域 通信作为普通方法调用(无RPC或REST) 因为他们没有分发。

    立面主要代表:

    • AppointmentScheduleApplicationService.java进行模型修改
    • AppointmentScheduleQueryService.java用于将数据传递到其他域。
  3. 这个设置好吗?或者其他域名是否应与ApplicationQueryService直接对应?

1 个答案:

答案 0 :(得分:0)

您的结构似乎很好,但是当然取决于您的使用方式。六角形结构不仅仅是文件夹结构的问题。

关于模块或上下文之间的通信,我建议您努力实现尽可能少的耦合:您可以使用消息总线在发布域事件的情况下做到这一点,而其他域可以检索这些消息并执行其所需的任何操作。因此,从一个模块中您不需要了解其他模块,只需知道总线并能够从该总线中读取消息(通常以json格式序列化)。

模块发布和订阅事件:是依赖关系反转原理,但在体系结构级别。

如果您发布一些代码示例,我可能会更加明确。

祝你好运!