次のコードの何が問題になっていますか?
public class DeDoper {
public boolean wackapediaOkToday() {
DnsResolver resolver = ResolverFactory.getInstance().makeResolver();
return resolver.getIpAddressFor("wackapedia.org").equals("123.456.78.9");
}
}
このバージョンが好まれるのはなぜですか?
public class DeDoper {
@InjectService
private DnsResolver resolver;
public boolean wackapediaOkToday() {
return resolver.getIpAddressFor("wackapedia.org").equals("123.456.78.9");
}
}
ResolverFactory.makeResolver()を簡単にモックできます。これは、resolverの設定が最新の例であるのと同じです。
これは、ProQuest.bizからのこの記事で言われたことです:
この[最初の]バージョンのWackapediaOkTodayは、非常に大まかに言えば、DnsResolverが「注入」されています(ただし、ショットを取得するようなものではなく、ウェイターにチェックを依頼するようなものです)。しかし、それはテストの問題と「ずっと下のカメ」の問題を解決します。
ファクトリにチェーンされていますが、この[最初のバージョン]アプローチでは、ファクトリクラスに文字通り「チェーン」されています。(さらに悪いことに、ファクトリによって作成されたオブジェクトに依存関係がある場合は、ファクトリ内に新しいファクトリを導入する必要があります。)制御を完全に「反転」していないため、ファクトリを内部から呼び出し(制御)しています。私たちのクラス。
必要だったのは、クラスのコントロールを完全に取り除き、(依存関係のために)何を取得しているかをクラスに伝える方法でした。