テスト容易性ブログを持っているMiskoHeveryによると。開発者は、「ホルダー」、「コンテキスト」、および「キッチンシンク」オブジェクトを避ける必要があります(これらは他のあらゆる種類のオブジェクトを取得し、共同作業者のバッグです)。そのオブジェクトのホルダーではなく、パラメーターとして必要な特定のオブジェクトを渡します。
ブローの例では、このコードは臭いですか?必要なパラメーターのみを渡すか、必要なデータを含むモデル/Beanを渡す必要があります。
たとえば、次のようなことをしますか?注。おそらく、コンストラクター引数としてデータを渡すことができたはずです。これはコードの臭いですか?
public Parser {
private final SourceCodeBean source;
public Parser(final SourceCodeBean s) {
this.source = s;
}
public void parse() {
// Only access the source field
this.source.getFilename();
...
... assume that the classes uses fields from this.source
...
}
}
public SourceCodeBean {
private String filename;
private String developer;
private String lines;
private String format;
...
...
<ONLY SETTERS AND GETTERS>
...
}
...
Or
public Parser {
public Parser(String filename, String developer, String lines ...) {
...
}
}
And building a test case
public void test() {
SourceCodeBean bean = new SourceCodeBean():
bean.setFilename();
new Parser().parse();
}
別の質問:テスト可能なコードを書くことで、あなたはあまりにも多くのクラスを書く傾向がありますか?クラスが多すぎるのか、メソッドが多すぎる1つのクラスがあるのは間違っていますか。クラスは便利で、単一の目的があります。しかし、どこでそれらを1つの大きなクラスにリファクタリングできるかはわかりました...しかし、そのクラスには複数の目的があります。