我正在为我的后端服务开发一个轻量级框架,以支持类似管道的处理。
- 在管道中,每个阶段本质上都是一个
Function<IN, OUT>
,其中IN
是前一阶段的OUT
- 每个阶段都可以将其结果设置为数据模型(我们称之为
Record
( - 尽管输入是
IN
(前一阶段的输出(,但到目前为止,每个阶段都可以查看所有以前的结果
我的问题:
因此,从本质上讲,每个阶段都可以将其结果设置为数据模型,并可以获得迄今为止的所有其他结果。这使得模型在管道中的所有组件之间是共享的和可变的。
这会被认为是反模式吗?如果是,您将对我的体系结构进行哪些更改?
感谢
当行中的组件相互独立时,管道设计是好的。例如,您可以在web服务器过滤器链(如Apache httpd过滤器或Java servlet过滤器(中看到它的使用:;链接";链中可以检查请求和响应,并可能进行修改。
当组件之间产生隐藏的依赖关系时,管道设计很快就会出错。隐藏依赖关系是指链中的一个链接使用上游链接中的计算结果。这种依赖关系没有被类型系统捕获,也没有被测试覆盖,而且经常甚至没有文档记录。如果程序员现在修改或重构上游链接的代码,那么下游代码很有可能会中断。在多个开发人员共同工作的大型系统中,隐藏的依赖关系会很快发生,并导致代码变得脆弱和难以理解。
如果您看到隐藏的依赖关系形式,最好将管道设计替换为使依赖关系图显式的设计。