【问题标题】:Domain model used by multiple services?多个服务使用的域模型?
【发布时间】:2011-12-06 08:53:41
【问题描述】:

我有一个域模型来处理投诉。许多功能需要向外部世界公开,因此我可以创建一个公开可用的 WCF REST 服务来执行此操作。其他功能仅供内部使用(管理内容),因此我可以创建另一个内部托管的 WCF 服务来执行此操作。

结果是两个服务使用相同的域模型。

从技术上讲,这意味着两个可部署单元(服务)使用同一个类库 - 所以如果类库发生变化,我必须部署这两个服务。

让一个以上的可部署单元使用一个变化很大的类库,这是一件坏事吗?我是否应该让外部服务使用内部服务而不是域模型,以便域模型仅供内部服务使用?

只是想知道最好的方法是什么,确保之后没有技术问题(易于维护和部署)。感谢您的建议!

编辑:我决定这样做:公共服务将公开为 WCF REST + JSON,并且只负责将数据转换为移动应用程序所需的正确格式。该公共服务使用内部命令服务(全域 WCF)执行命令,使用内部查询服务(ADO.NET 数据服务)进行查询。

【问题讨论】:

    标签: c# wcf deployment dependencies domain-driven-design


    【解决方案1】:

    有一个变化很大的类库被多个可部署单元使用,这是一件坏事吗?

    它可能会产生管理问题,但有时是不可避免的,尤其是对于共享库。但是,当您处理域模型时,最好限制公开模型功能的服务数量。我喜欢您提出的让外部服务引用内部服务的解决方案。然后外部服务在内部服务之上提供了一种外观,内部服务专注于暴露领域的功能。然而,正如 Thomas Jaskula 所指出的,评估服务的行为方面很重要。外部服务是从内部服务中公开一组有限的功能,还是一起提供不同的功能?有界上下文是什么?

    【讨论】:

      【解决方案2】:

      我不确定我们是否在谈论领域驱动设计,但根据您的描述,它不适合我。 DDD 是关于行为,而不仅仅是实体和值对象。

      外部用户可以通过 WCF REST Api 与您的域进行的交互与管理员可以进行的交互不同。因为行为很可能不一样。然后对我来说,从域模型的角度来看,您必须对您尝试解决的每个问题(WCF 和管理员)进行建模。所以两个模型。

      在 DDD 中,不只需要一种模型来处理或处理业务问题。

      但是,如果您的域只是一个抽象或持久性(愚蠢的实体),您可以在两个项目中使用它。但即便如此,我也会创建两个不同的模型来避免部署问题,并且您可能不会一直使用相同的实体,具体取决于上下文。

      这只是我的看法。

      【讨论】:

      • 在这种情况下我会反对两种模型,因为这两种服务之间的主要区别似乎不在于行为,而在于暴露的操作范围。
      • 是的,公共服务只负责将数据转换为正确的格式 (JSON)。
      猜你喜欢
      • 2019-04-01
      • 1970-01-01
      • 2018-01-26
      • 1970-01-01
      • 2018-05-14
      • 2019-04-15
      • 1970-01-01
      • 2016-08-26
      • 1970-01-01
      相关资源
      最近更新 更多