0

テスト容易性ブログを持っている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つの大きなクラスにリファクタリングできるかはわかりました...しかし、そのクラスには複数の目的があります。

4

3 に答える 3

3

また、Misko Heveryは、パラメーター数が増えるたびに、またはこれが論理的に許容できる場合に、パラメーターをクラスにグループ化するようにアドバイスしていることに気付くでしょう。

したがって、あなたの場合、SourceCodeBean後悔することなく合格することができます。

于 2010-01-07T14:50:55.037 に答える
0

あなたが求めていることの多くは非常に主観的であり、あなたが達成しようとしていることの全範囲を知らずに有用な提案をすることは困難ですが、ここに私の2セントがあります。

私はあなたの後者のデザインで行きます。SourceCodeParserというクラスを1つ作成し、コンストラクターにファイル名、開発者などを取り込み、解析メソッドを持たせます。このようにして、オブジェクトはそれ自体を解析する責任があります。

通常、パラメーターの数が多すぎない場合は、コンストラクターにパラメーターを渡すことを好みます。Code Completeは、最大7つのパラメーターを推奨します。コンストラクターパラメーターの数が煩わしい場合は、前述のSourceCodeParserクラスからいつでもセッターを作成できます。

さまざまな解析動作を開始する方法が必要な場合は、SourceCodeParser内でParserデリゲートを使用し、コンストラクターパラメーターまたはセッターとして渡すことをお勧めします。

于 2010-01-07T14:51:44.567 に答える
0

さまざまな情報を関連付けることが唯一の目的であるクラスがある場合、そのクラスをパラメーターとして直接使用してはならない理由はわかりません。その理由は、クラスがまさにそれを行うようにコーディングされているからです。それでは、なぜクラスにその仕事をさせないのでしょうか。だから私は間違いなく前者を好むでしょう。

Parserさて、これは、で意味的に提示されている情報が実際に必要であると想定していますSourceCodeBean。実際に必要なのがファイル名だけの場合Parserは、ファイル名だけを取得する必要があります。2番目の方法をお勧めします。

ここで私が心配するのはSourceCodeBean、一種の情報の「流し台」になることだけだと思います。たとえば、ここではファイル名とフォーマットのフィールドが完全に理にかなっています。しかし、本当に開発者とラインが必要ですか?代わりに、それらはある種の関連するメタデータ情報クラスに含まれる可能性がありますか?

于 2010-01-07T15:11:20.253 に答える