4

単一責任の原則に従い、次のクラスがあるとします。

public class Extractor {

   public Container extract(List<Container> list) {

       ... some extraction
   }
}

public class Converter {

   public String convert(Container container) {

       ... some conversion
   }
}

ご覧のとおり、原則に従っており、クラス/メソッドのすべての名前がそれらの機能を示しています。今、このようなメソッドを持つ別のクラスがあります。

public class SomeClass {
   private Extractor extractor = new Extractor();
   private Converter converter = new Converter();
   private Queue queue = new Queue();

   public void someMethod(List<Container> list) {
       Container tmp = extractor.extract(list);
       String result = converter.convert(tmp);

       queue.add(result);
   }
}

ご覧のとおり、「someMethod」メソッドは抽出、変換、および追加を呼び出します。私の質問は今、そのようなクラス/メソッドをどのように呼び出すのですか? 実際には抽出、変換、または追加していませんが、それらを呼び出していますか? その責任にちなんでメソッドに名前を付けるとしたら、それは何でしょうか?

4

5 に答える 5

2

あなたはキューに追加しているようで、何も返さないので、私はそれをaddToQueue. 変換 + 抽出するという事実は、公開する必要がないと思われる実装の詳細です。

于 2011-11-16T10:18:55.173 に答える
1

どうprocessAndQueueMessageですか?

また、(関係ありません)、 and を作成(使用)newしないでください、むしろそれらを(構築時またはセッターで)注入し、それらへのインターフェースを使用する必要があります。これにより、テストが容易になり、実装間の結合が減少します。ExtractorConverterSomeClass

// Assuming Converter and Extractor are interfaces to the actual implementations
public class SomeClass {
   private final Extractor extractor ;
   private final Converter converter;
   private Queue queue = new Queue();

   public SomeClass(Extractor extractor, Converter converter) {
       this.converter = converter;
       this.extractor = extractor;
   }

   public void someMethod(List<Container> list) {
       Container tmp = extractor.extract(list);
       String result = converter.convert(tmp);

       queue.add(result);
   } 
}

そして、次を使用して作成します。

final SomeClass myProcessor = new SomeClass(new MyExtractorImplementation(), new MyConverterImplementation());

Spring(または、またはのような DI コンテナーを使用しますPico)

于 2011-11-16T10:19:39.283 に答える
0

ある種のビルダークラスのように聞こえます。ある形式でデータを取得し、それを変換してから、何らかの出力形式を作成します。では、「SomethingSomethingBuilder」はどうでしょうか。

メソッドに適切な名前を付けるのを忘れたため、誰かが私に反対票を投じたと思います。申し訳ありません。

したがって、このメソッドはビルダー クラスにデータを段階的に追加します。私はそれを「Add」、「AddData」、または「Push」と呼びます (多くの標準クラスで非常に似た意味を持つため、おそらくプッシュを使用します)。

「Builder」の代替は、潜在的に「SomeKindOfCreator」になる可能性があります。明らかに、クラスが実際に作成しているものに基づいて名前を付けます。

于 2011-11-16T10:13:41.627 に答える
0

名前を本当に一般的なものにしたい場合は、 addToQueue() または populateQueue() を使用します。そのオブジェクトに何かを取得することがメソッドのポイントと思われるからです。

しかし、実際には、そのレベルでは、それが達成しようとしているビジネス ロジックによって名前を付けることができます。


適切な名前が思いつかない場合は、手続き型の抽​​象化がかなり恣意的/人工的であることを示しており、より良い方法がある可能性を示唆しています。またはそうでないかもしれません。

于 2011-11-16T10:50:02.977 に答える