【问题标题】:Confusion about interaction with other domains对与其他领域的交互感到困惑
【发布时间】:2016-07-16 09:12:48
【问题描述】:

我们正在为全新的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 用于将数据传递到其他域。

这个设置好吗?或者其他域应该直接对应ApplicationQueryService

【问题讨论】:

  • CQS 只是您将类中的方法区分为返回 void 的命令和返回某些内容的查询的方式。你的意思是 CQRS 可能是?
  • 我的问题更多与以下相关:1)我的包结构是否有意义(六边形)? 2)是否可以提供一个仅用于与其他域交互并且主要将操作委托给Application和Query Service的Facade?欢迎任何建议!

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


【解决方案1】:

你的结构看起来不错,但当然这取决于你如何使用它。六边形架构不仅仅是文件夹结构的问题。

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

模块发布和订阅事件:是依赖倒置原则,但在架构层面。

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

祝你好运!

【讨论】:

    猜你喜欢
    • 2012-08-22
    • 2012-03-01
    • 2017-08-27
    • 1970-01-01
    • 2015-03-14
    • 1970-01-01
    • 2019-09-13
    • 2012-07-22
    • 2013-05-13
    相关资源
    最近更新 更多