gpt4 book ai didi

java - 我应该注入(inject)执行算法所需的对象吗?我应该注入(inject)一切吗?

转载 作者:搜寻专家 更新时间:2023-10-31 20:21:43 25 4
gpt4 key购买 nike

也许我在文档中遗漏了它,但我想知道我应该如何处理“辅助对象”?

代码示例:

public Path dijkstra(Node startNode, Node endNode) {
Set<Node> nodesToInspect = new HashSet<Node>(); // should this Object be injected?
Path path = new Path(); // and this one?

while (!nodesToInspect.isEmpty()) {
// some logic like:
path.add(currentNode);

}

return path;
}

我应该注入(inject)所有东西还是应该在某个时候说算法“最了解”它需要什么?我应该尝试消除每一个"new"吗?还是某些对象创建很好,例如 HashSet、ArrayList 等 API 类。

最佳答案

在用依赖注入(inject)替换简单的 new 之前,您需要问自己“为什么我要这样做?” ...“它有什么真正的好处?”。如果答案是“我不知道”或“什么都不知道”,那么你不应该。

在这种情况下,我看不出在示例代码的第一种情况下使用 DI 有什么真正的好处。该方法之外的任何东西都不需要知道内部集是如何表示的……甚至不需要知道它的存在。

您应该问的另一个问题是是否有更简单、更明显的方法来实现目标。例如,对 path 变量使用 DI 的(最可能的)目的是允许应用程序使用不同的 Path 类。但这样做的简单方法是将 Path 实例作为显式参数传递给 dijkstra 方法。您甚至可以使用重载来使它更可口;例如

public Path dijkstra(Node startNode, Node endNode) {
return dijkstra(startNode, endNode, new Path());
}

public Path dijkstra(Node startNode, Node endNode, Path path) {
...
}

最后要考虑的是,DI(在 Java 中)在某种程度上涉及反射,并且不可避免地比使用 new 或工厂对象/方法的经典方法更昂贵。如果您不需要 DI 的额外灵 active ,则不应为此付费。


我刚刚注意到你所指的两个变量是局部变量。我不知道有任何允许注入(inject)局部变量的 DI 框架......

关于java - 我应该注入(inject)执行算法所需的对象吗?我应该注入(inject)一切吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13943704/

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