gpt4 book ai didi

java - 使用委托(delegate)来分隔层

转载 作者:行者123 更新时间:2023-11-29 04:36:39 24 4
gpt4 key购买 nike

我们重构了一个 Java 应用程序,其中的代码到处都是,甚至没有遵循最基本的原则或模式。我们设法提取了以下层:

  • 数据层
  • 一个存储库层,其中包含用于每种数据库实体的命令和查询存储库
  • 一个服务层,它只与存储库一起工作,也可以有业务逻辑
  • 一个服务编排层,它进行服务组合以实现应用程序的业务(不适用于存储库)
  • 一个用于显示 View 的 API 和一个 Controller 层,它们应该只与编排服务一起使用

在多种情况下, Controller 或 API 需要从服务(服务层)调用方法,但鉴于我们希望让 Controller 仅与编排服务一起工作,我们被迫创建一个编排服务,它不除了将方法调用委托(delegate)给实际服务外,什么都不做。

这是一种正确的方法吗?还是我们应该移除中间人(编排),因为它除了委托(delegate)什么都不做?

最好的问候,克里斯蒂安。

最佳答案

如果是我的代码,我宁愿遵循一个标准——即使编排层有时只是直接委托(delegate)给服务层。在业务流程发生变化的情况下,这种变化有望被隔离到编排层,使调用代码不受变化的影响。此外,如果您试图围绕代码结构实现标准,请保持一致,以免不良做法再次开始蔓延。如果您有时直接调用服务层,而有时通过编排层调用服务层,这可能只会导致开发人员混淆何时使用哪种方法。

最后,检查您的操作的粒度 - 某些方法调用是否真正完全独立存在,或者它们是否构成更大业务流程的一部分?我同意您的分层方案 - 您的表示层应该知道如何调用业务流程(由编排层公开),但它应该不知道执行该流程所涉及的细节(由服务层公开)。即使业务流程只有一个步骤,它仍然是一个可以被编排层暴露的业务流程——它只是恰好是一个非常简单的流程。

关于java - 使用委托(delegate)来分隔层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41160103/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com