我刚刚开始使用Guice 当我使用Guice时,我的应用程序类松散耦合 使用Google Guice会使代码的可读性降低,不太清晰,理解和调试也更复杂吗? 你对它的体验如何?
答案 0 :(得分:4)
我的经验一直是积极的。我的代码更具可读性;天文数字更容易测试和维护。松耦合是重点。
答案 1 :(得分:3)
如果有人不熟悉依赖注入,那么是的,我认为这会使代码更难以理解...... 起初。例如,我第一次使用Spring时,至少可以说有点困惑。但是,一旦你围绕注入豆等概念,你就有意义了。
良好的设计至关重要,DI对松散耦合和可测试性至关重要。
答案 2 :(得分:2)
合理地使用依赖注入,无论是通过Guice还是其他方式,都可以使代码更容易测试并保持干净和松散耦合。它使得测试双精度(模拟对象等)的使用变得更加容易。
做得很糟糕,或者走极端,它可以使系统几乎不可理解 - 即使每个类可能是孤立的,也很难分辨程序集<类的/ em>(特别是如果涉及大量的XML配置文件!)。有些系统似乎将DI配置本身用作编程语言,很快就会变得无法管理。
答案 3 :(得分:2)
哪个更容易阅读?
A:
public class ServiceCaller {
private String url;
private Service service;
public A {
url = System.getProperty("url);
Hashtable env = ...;
Context ctx = new InitialContext(...)
service = ctx.lookup(...)
}
public String getValue() {
return service.getValue();
} ...
或
public class ServiceCaller {
private Service service;
@Inject
public ServiceCaller(Service service) {
this.service = service;
}
public String getValue() { ...}
如果您不习惯DI,您可能会说&#34;#1&#34;,因为您可以阅读所有实现,并确切知道发生了什么,服务是什么等等。但问题是:从外部查看课程合同,你不知道里面发生了什么。 #2明确指出:&#34;给我一个服务实例,我会给你一个值。你所要做的就是相信有一个隐藏机制可以提供这种服务 - 实例&#34;。 (隐藏=隐藏在普通视野中,你需要在你的代码中有一个&#34; getproperty-getcontext-getService-Module&#34;)
所以在我看来:DI更容易阅读(尽可能使用基于构造函数的注入)。它更容易测试,有些人可能会说,最好的文档是一个写得很好的工作测试。你需要一点信心才能相信会有一个服务实例......