【问题标题】:DDD - collection of value objectsDDD - 值对象的集合
【发布时间】:2017-04-17 15:29:27
【问题描述】:

我有一些从外部 api 获取产品列表的中间件代码。我正在对响应进行建模并将响应返回给我的代码的客户端。

我的代码的任何客户都不关心返回的单个产品的细节:他们只想要产品的集合。

如何使用 ddd 建模?

每个产品属性一个值对象,一个产品一个实体和一个包含所有产品的存储库?

【问题讨论】:

    标签: domain-driven-design value-objects


    【解决方案1】:

    为什么不使用 CQRS (https://docs.microsoft.com/en-us/azure/architecture/patterns/cqrs)。

    将您的模型分为读写模型。在您的情况下,阅读模型就可以了。让他们成为 POCO。在读取方面,我们不需要使用 DDD 战术建模工具。

    欲了解更多信息,请访问我提供的链接。

    【讨论】:

      【解决方案2】:

      我想你快到了,你的中间件(外部 api)可以是一个存储库,通过查找方法和返回产品模型。

      建议将存储库作为接口(例如 ProductRepository),以使代码更具可测试性。您可以有简单的测试实现(例如 ProductRepositoryTestImpl)和中间件通信的主要实现(例如 ProductRepositoryImpl)。

      对于包装,我更喜欢这个:

      domain
            \model
                  \product
                          |Product
                          |ProductRepository
      infrastructure
                    \persistence
                                \YOUR_EXTERNAL_API_NAME
                                                       |ProductRepositoryImp
                                \eclipselink
      ...
         \test
              \...
                  |ProductRepositoryTestImpl
      

      【讨论】:

        【解决方案3】:

        您应该会看到像 external bounded context 这样的外部 api。您的local bounded context 将使用anti-corruption layer 将术语从远程转换为本地有界上下文。因此,您的代码实际上是anti-corruption layer

        现在,您应该将这些产品保留为entities 还是value objects?这取决于您当地的使用情况。您是否修改这些产品。如果你不修改它们,那么它们就是Value objects

        在任何情况下,您可能都必须使用repository 来持久化/检索产品。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-06-07
          • 1970-01-01
          • 2011-03-24
          • 1970-01-01
          • 1970-01-01
          • 2017-09-20
          • 2014-06-03
          相关资源
          最近更新 更多