Java 设计模式:管道和不变性

Java design patterns: Pipeline and immutability

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

我的问题:

所以基本上,每个阶段都可以将其结果设置到数据模型中,并且可以获得到目前为止的所有其他结果。这使得模型在管道中的所有组件之间共享和可变。

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

谢谢

当流水线中的组件彼此独立且保持独立时,流水线设计是好的。例如,您会看到它用于 Web 服务器过滤器链(如 Apache httpd 过滤器或 Java servlet 过滤器):链中的每个“link”都可以检查请求和响应并可能进行修改。

管道设计很快就会变坏,因为组件之间会发展出隐藏的依赖关系。隐藏依赖是指链中的一个 link 使用在上游 link 中完成的计算结果。这种依赖性不会被类型系统捕获,也不会被测试覆盖,而且通常甚至没有记录。如果程序员现在修改或重构上游 link 的代码,下游代码很可能会中断。在一个由多个开发人员共同工作的大型系统中,隐藏的依赖关系会很快出现,并导致代码脆弱且难以理解。

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