1

Guiceを使い始めたばかりです。
Guice を使用していると、アプリケーション クラスが疎結合になります。
Google Guice を使用すると、コードが読みにくくなり、わかりにくくなり、理解とデバッグがより複雑になりますか?
あなたの経験はどうですか?

4

4 に答える 4

4

私の経験は一様にポジティブです。私のコードははるかに読みやすくなっています。テストと保守が天文学的に容易になります疎結合がポイントです。

于 2012-04-04T21:12:26.567 に答える
3

誰かが一般的に依存性注入に精通していない場合は、そうです。コードをたどって理解するのが難しくなる可能性があると思います...最初は. たとえば、Spring を初めて使用したときは、控えめに言っても少し戸惑いました。ただし、豆を注入するなどの概念に頭を悩ませると、それは理にかなっています。

優れた設計は最も重要であり、DI は疎結合とテスト可能性にとって重要です。

于 2012-04-04T21:13:52.173 に答える
2

Guice を使用するかどうかに関係なく、依存性注入を賢明に使用すると、コードのテストがはるかに容易になり、クリーンで疎結合を維持できます。これにより、テスト ダブル (モック オブジェクトなど) の使用がはるかに簡単になります。

やり方が下手だったり、極端に行ったりすると、システムがほとんど理解できなくなる可能性があります。たとえ各クラスが個別に明確であっても、クラスのアセンブリが何をするのかを伝えるのは非常に困難になる可能性があります (特に、大量の XML 構成ファイルが関係している場合!)。 . 一部のシステムでは、DI 構成を独自のプログラミング言語として使用しているように見えますが、これはすぐに管理不能になる可能性があります。

于 2012-04-04T21:42:55.413 に答える
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 に慣れていない場合は、すべての実装を読むことができ、何が起こっているか、サービスが何であるかなどを正確に知ることができるため、おそらく「#1」と言うでしょう。しかし問題は、クラスのコントラクトを外側から見ると、内部で何が起こっているのか分からないことです。#2 は明確に次のように述べています。(非表示 = 明白に隠されています。コードに「getproperty-getcontext-getService-Module」が必要です)

したがって、私の意見では、DIの方が読みやすいです(可能な限りコンストラクターベースのインジェクションを使用してください)。その方がテストが簡単で、最良のドキュメントはよく書かれた動作するテストであると言う人もいるかもしれません。サービスインスタンスがあると信じるには、少しの信仰が必要です...

于 2012-04-05T06:01:27.567 に答える