应用服务点?

Point of the application service?

我不知道我是否看到应用服务的好处。似乎使用控制器和域服务可以获得相同的结果。有人可以 post 说明在 controller/domain 服务上使用应用服务有意义吗?

主机独立性 - 如果您的域模型仅通过 HTTP 调用来执行,您的控制器可能会很好地保持低复杂性但能够从多个主机调用它们(想想控制台事件队列、无服务器、测试)的应用程序可能是有益的。我喜欢根据需要增加复杂性,但不幸的是,许多开发人员只会复制以前出现的模式。特别是如果最初的计划因减员而失败。

Tests - 上面提到过,几乎只是上述多维数据集的一侧,但如果您不这样做,将应用程序服务作为编写测试的接缝通常非常有用想要将您的测试与您的主机联系起来。话虽如此,多年来,用于在 proc 中测试 ASPNET(我相信还有其他技术)的工具已经取得了长足的进步。

显示意图 - 不幸的是,控制器受到功能引力的影响。所有功能都倾向于被拉入其中。他们接受 HTTP 请求吗?反序列化这些请求?转换为命令?给模特?编排领域模型需要创建模型、领域服务、存储库吗?它的真正责任是什么?服务这个术语太过重载了,以至于我合作过的团队都调用应用程序服务用例,并根据他们试图行使领域的确切内容来命名它们。

虽然您当然可以使用控制器作为这个入口点,但是您失去了一些灵活性,但获得了一些初始的简单性。这正是您在延迟使用 DDD 而不是没有管理复杂性策略的标准 MVC 应用程序时所采取的平衡行为。也许如果您没有看到好处,应用程序还没有达到最初使用 DDD 所需的复杂性?它确实带来了复杂性成本。

关于 域服务 ,它们实际上是您域的一部分并完成工作,而 应用程序服务 实际上是入口协调整个用例的点。小心不要过度使用域服务,就我个人而言,我经常将它们视为我未能找到合适的模型(但也许只有我就是这样)。