gpt4 book ai didi

java - 避免将参数从高级类传递到低级类

转载 作者:行者123 更新时间:2023-11-30 10:32:23 25 4
gpt4 key购买 nike

在我的 Java Web 服务器项目中,我的 Main.main 方法采用一个参数来指定它将在其中查找某些文件的目录,我稍后会用到这些文件。我的问题是我实际上并没有在我的高级类(class)中对这个论点做任何事情,但我的一些低级类(class)需要这些信息。

自然地,解析和存储我的命令行参数的类是最先使用的类之一,即我的最高级别类之一,所以我正在努力寻找一种方法使命令行参数可访问我的低级类(class)。

似乎我仅有的两个选择是要么一直向下传递它,通过除了将它传递到下一级之外从不触及参数的类,或者给它一个全局范围。从设计的角度来看,这些似乎都不是很好的选择,所以我想知道是否有我遗漏的替代方案,或者我是否只需要选择两害相权取其轻——或者彻底改造我的类(class)结构方式.

最佳答案

避免将一些参数传递给不需要它们的类是正确的。这样做的诀窍在于,如果设计得当,低级对象仍然在高层构建,这意味着您通常会在应用程序顶部的某个地方传递所需的参数。

一个有两个层次的例子。而不是这样做:

public class ObjectA {
public ObjectA(String path) {
....
b = new ObjectB(path);
}
}

public class ObjectB {
public ObjectB(String path) {
...
}
}

public static void main(String[] args) {
...
new ObjectA(path);
}

你将 path 传递给 ObjectA 只是因为它需要使用该参数构造 ObjectB,你这样做:

public class ObjectA {
public ObjectA(ObjectB b) {
....
}
}

public class ObjectB {
public ObjectB(String path) {
...
}
}

public static void main(String[] args) {
...
new ObjectA(new ObjectB(path));
}

这避免了传播依赖关系,并且通常是依赖注入(inject)的一部分。 DI 的声誉喜忧参半,因为它被 Spring 和 JEE 等容器所采用,但其核心 DI 实际上仅意味着您不应该在其他对象中实例化对象(即使是较低级别的对象),相反,已经配置的对象应该传递给其他对象。这有效地将对象构造和配置与使用它的对象分离。

以这种方式构建应用程序起初听起来可能很奇怪,而且它对设计有各种奇怪的后果,但这是做事的正确 (OO) 方式,它可以解决您的问题。

关于java - 避免将参数从高级类传递到低级类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42683531/

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