使用委托分隔图层

时间:2016-12-15 09:02:20

标签: java service architecture composition delegation

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

  • 数据层
  • 包含每种数据库实体的命令和查询存储库的存储库层
  • 一个服务层,它只适用于存储库,也可以有业务逻辑
  • 服务编排层,用于执行服务组合以实现应用程序的业务(不适用于存储库)
  • 用于显示视图的API和Controller层,该层应仅适用于编排服务

控制器或API需要从服务(服务层)调用方法的情况有多种情况,但考虑到我们希望控制器仅与编排服务一起工作,我们不得不创建一个编排服务而不是做任何事情,但将方法调用委托给实际服务。

这是一种正确的方法,还是应该删除中间人(编排)除了委托之外什么都不做?

祝你好运, 克里斯蒂安。

1 个答案:

答案 0 :(得分:3)

如果是我的代码,我宁愿遵循标准 - 即使业务流程层有时只是直接委托给服务层。如果业务流程发生更改,则该更改有望隔离到业务流程层,从而使调用代码不受更改的影响。此外,如果您试图围绕代码结构强制执行标准,请保持一致,以免糟糕的做法再次开始蔓延。如果您有时直接调用服务层,而在其他时候,通过业务流程层,可能只会导致开发人员在使用哪种方法时产生混淆。

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