如何命名只调用其他方法的类/方法?

时间:2011-11-16 10:09:35

标签: java principles responsibility

说我遵循单一责任原则,我有以下课程。

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”-Method会调用提取,转换和添加。我现在的问题是,你如何称呼这样的类/方法?它实际上并不是在提取,转换或添加,而是在调用它们? 如果你在责任之后命名该方法会是什么?

5 个答案:

答案 0 :(得分:2)

好吧,因为您似乎添加了一个队列而且您没有返回任何我称之为addToQueue的内容。转换+提取的事实是我认为不需要公开的实现细节。

答案 1 :(得分:1)

processAndQueueMessage怎么样?

另外(不相关),您不应该在new中创建(使用ExtractorConverterSomeClass,而应该注入它们(在施工时)或者在setter中),并使用它们的接口。这将使测试更容易,并减少实现之间的耦合。

// 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());

(或使用DI容器,如SpringPico

答案 2 :(得分:0)

听起来像某种类型的构建器类。您以一种格式获取数据,转换它然后创建某种输出格式。那么“SomethingSomethingBuilder”怎么样?

我假设有人向我倾倒,因为我忘了为这个方法提供一个好名字。对不起。

因此,此方法会将增量数据添加到构建器类中。我会称它为“Add”,“AddData”或“Push”(我可能会推送,因为它在许多标准类中具有非常相似的含义)。

“Builder”的替代方案可能是“SomeKindOfCreator”。显然,你会根据你的班级实际创建的内容来命名它。

答案 3 :(得分:0)

如果你想让这个名字变得非常通用,那么我会选择addToQueue()或populateQueue(),因为在这个对象中获取内容似乎是该方法的重点。

但实际上在那个级别我会通过它试图完成的业务逻辑来调用它,在这种情况下,这个名称实际上取决于它的用途。


如果你不能提出一个好名字,那就表明你的程序抽象是相当随意/人为的,并且可能暗示可能有更好的方法来做到这一点。或者可能不是。

答案 4 :(得分:0)

你要做的是考虑方法调用序列的复合含义,将其转换为简洁的动词或动词短语,并将其用作名称。如果你不能提出一个简洁的名字,那么你可以使用通用/中性名称(如“过程”)或使用完全虚假的东西(如“sploddify”)。