Java 静态方法或DI
一般来说,我对Java或编程都是新手,通常我会将主类的实例作为静态方法,以便从其他类轻松访问它。 例如Java 静态方法或DI,java,dependency-injection,Java,Dependency Injection,一般来说,我对Java或编程都是新手,通常我会将主类的实例作为静态方法,以便从其他类轻松访问它。 例如 私有静态主实例然后我会为它做一个getterpublicstaticmain getInstance(),在其他类上我只需做Main.getInstance().otherMethods()以获取在主类上声明的其他方法和变量 最近有人告诉我不建议这样做,并告诉我应该使用依赖注入。我的问题是为什么我不应该在Java中使用它,为什么依赖注入会更好?使用这种方法或只是将其作为方法参数传递之间有什么区
私有静态主实例
然后我会为它做一个getterpublicstaticmain getInstance()
,在其他类上我只需做Main.getInstance().otherMethods()
以获取在主类上声明的其他方法和变量
最近有人告诉我不建议这样做,并告诉我应该使用依赖注入。我的问题是为什么我不应该在Java中使用它,为什么依赖注入会更好?使用这种方法或只是将其作为方法参数传递之间有什么区别?它的优点和缺点是什么?关于这一点,已经有很多问题和答案了。你可以搜索“为什么DI”来获得很多关于原因的理论。例如: DI的主要优势是:
- 灵活性——如果您需要更换一个组件,或者使用多个组件而不是单个组件,那么DI只允许您通过一些更改来调整代码
- 更容易进行单元测试-您可以将依赖项组件的模拟实现注入到正在测试的组件中,并且只测试目标组件
public static final DB_INSTANCE = ...;
在整个应用程序中都使用了,如下所示:
DB_INSTANCE.runQuery("SELECT ...");
然后,特性请求能够同时处理多个数据库(类似于“切分”)。
DB\u实例
singleton表示一个数据库,因此此功能需要重写成吨的代码行—组件现在已将“DB实例”注入其中。首先,依赖项注入不是特定于java的。这是一种误解。这在很多其他语言中都是个好主意。无论您使用什么以及关注点分离的具体实例,从业务逻辑中分离粘合代码(这就是依赖项注入)都是一个好主意。这不是个坏主意。你应该在你使用的每种语言中都这样做。对于不同的语言,您是如何做到这一点的
第二:它是一种设计模式,而不是框架。当然,有几种很好的Java框架可以实现这一点,当然,您可能希望使用它们。手动编写粘合代码是一件很愚蠢的工作。自动化是个好主意
其工作原理是简单地应用一些规则:
这里没有特定于Java的内容。这是应用坚实原则的逻辑结果。你不能这样做,也不能不做依赖注入。您可以在Javascript、Ruby、python、Haskell、lisp等语言中实现这一点。每当您听说代码难以测试或维护时,您就会发现人们将胶水代码和逻辑混合在一起,造成了一片混乱。这些语言中的每一种都有很好的习惯用法来实现这一点。看起来您使用的是单例模式(或者至少是对其进行了编译的东西;我希望您的类的构造函数是私有的!),因此我建议您只需搜索“单例vs DI”,您就会找到很多关于此主题的文章。您可能想阅读。