我应该传递参数还是将其注入到需要它们的地方?

问题描述 投票:1回答:1

我的应用程序中有两个组件。组件1是“模型构建器”。每隔[[几毫秒就将数据馈入该数据,并返回一个复杂的模型,该模型将传递给组件2。组件2分析该模型并基于该模型做出决策。我不确定如何将模型的新状态提供给组件2。

解决方案1

:将模型传递到组件2,并在组件的入口点“更新”所有依赖项。例如,Component2的一个非常嵌套的对象可能注入了“ holder”和“ holder2”。通过在顶层使用新信息更新持有者,这些叶对象将获得该信息。这种方法真的感觉就像我正在通过副作用进行交流,在其中很难发现更改的来源。 public class Component2 { SomeInformationHolder holder; //these holders are requested for information deep down the object graph SomeOtherInformationHolder holder2; Subcomponent1 sub1; Subcomponent2 sub2; @Inject public Component2(Subcomponent1 sub1,Subcomponent2 sub2, SomeInformationHolder holder, SomeOtherInformationHolder holder2) { super(); ... ... } public void analyzModel(TaModel taModel) { holder.update(taModel.getInformation()); holder2.update(taModel.getSomeOtherInformation()); sub1.analyze(); sub2.analyze(); } }

解决方案2

:我通过方法调用将整个模型传递给Component2的对象图。这使得很清楚新信息的来源。但是,我讨厌将所有信息都传递给别人,仅因为深度嵌套的对象需要它。这确实污染了我的代码: public class Component2 { Subcomponent1 sub1; Subcomponent2 sub2; @Inject public Component2(Subcomponent1 sub1,Subcomponent2 sub2) { super(); ... ... } public void analyzModel(TaModel taModel) { this.sub1.analyze(taModel); //from hereon the "taModel" is passed down deeply where it will be used in some leafs of the object graph this.sub2.analyze(taModel); } }
有什么充分的理由使我选择一种解决方案而不是另一种解决方案?是否有任何解决方案严重违反任何设计规范?
java design-patterns dependency-injection architecture dependencies
1个回答
0
投票
是的,您应该将模型向下传递到堆栈中。

[我们所有人都有过这样的实例,在这些实例中,我们试图通过隐藏信息传递来人为地使代码“干净”。通过副作用进行交流使某些最难以跟踪的错误变得很难。此外,通过不传递对象,使诸如多线程处理之类的事情变得异常困难。保持您的代码简单,它将以可测试性,可伸缩性和可维护性奖励您。开始隐藏信息,它最终将由内而外腐烂。

© www.soinside.com 2019 - 2024. All rights reserved.