Java设计模式:流水线和不变性



我正在为我的后端服务开发一个轻量级框架,以支持类似管道的处理。

  • 在管道中,每个阶段本质上都是一个Function<IN, OUT>,其中IN是前一阶段的OUT
  • 每个阶段都可以将其结果设置为数据模型(我们称之为Record(
  • 尽管输入是IN(前一阶段的输出(,但到目前为止,每个阶段都可以查看所有以前的结果

我的问题:

因此,从本质上讲,每个阶段都可以将其结果设置为数据模型,并可以获得迄今为止的所有其他结果。这使得模型在管道中的所有组件之间是共享的和可变的。

这会被认为是反模式吗?如果是,您将对我的体系结构进行哪些更改?

感谢

当行中的组件相互独立时,管道设计是好的。例如,您可以在web服务器过滤器链(如Apache httpd过滤器或Java servlet过滤器(中看到它的使用:;链接";链中可以检查请求和响应,并可能进行修改。

当组件之间产生隐藏的依赖关系时,管道设计很快就会出错。隐藏依赖关系是指链中的一个链接使用上游链接中的计算结果。这种依赖关系没有被类型系统捕获,也没有被测试覆盖,而且经常甚至没有文档记录。如果程序员现在修改或重构上游链接的代码,那么下游代码很有可能会中断。在多个开发人员共同工作的大型系统中,隐藏的依赖关系会很快发生,并导致代码变得脆弱和难以理解。

如果您看到隐藏的依赖关系形式,最好将管道设计替换为使依赖关系图显式的设计。

最新更新