Guice是否使我的代码可读性降低?

时间:2012-04-04 21:08:31

标签: java guice

我刚刚开始使用Guice 当我使用Guice时,我的应用程序类松散耦合 使用Google Guice会使代码的可读性降低,不太清晰,理解和调试也更复杂吗? 你对它的体验如何?

4 个答案:

答案 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更容易阅读(尽可能使用基于构造函数的注入)。它更容易测试,有些人可能会说,最好的文档是一个写得很好的工作测试。你需要一点信心才能相信会有一个服务实例......