gpt4 book ai didi

java - 我应该传递参数还是将它们注入(inject)到需要它们的地方?

转载 作者:行者123 更新时间:2023-11-30 05:22:48 24 4
gpt4 key购买 nike

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

解决方案 1:将模型传递给组件 2,并在组件的入口点“更新”所有依赖项。例如,Component2 的嵌套非常深的对象可能已注入(inject)“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 - 我应该传递参数还是将它们注入(inject)到需要它们的地方?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59255969/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com