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”-Method 确实调用了提取、转换和添加。我现在的问题是,你怎么称呼这样的类/方法?它实际上不是提取、转换或添加,而是调用这些?如果你以它的职责命名该方法,那会是什么?

4

5 回答 5

2

好吧,因为您似乎添加到队列中并且您没有返回任何我称之为的东西addToQueue。您转换 + 提取的事实是我认为不需要公开的实现细节。

于 2011-11-16T10:18:55.173 回答
1

怎么样processAndQueueMessage

另外(不相关),您不应该在您new的 中创建(使用)Extractorand ,而应该注入它们(在构造或设置器中),并使用它们的接口。这将使测试更容易,并减少实现之间的耦合。ConverterSomeClass

// 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 容器,如Springor Pico

于 2011-11-16T10:19:39.283 回答
0

听起来像是某种构建器类。您以一种格式获取数据,对其进行转换,然后创建某种输出格式。那么“SomethingSomethingBuilder”呢?

我假设有人对我投了反对票,因为我忘记为该方法提供一个好名字。对于那个很抱歉。

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

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

于 2011-11-16T10:13:41.627 回答
0

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

于 2011-11-16T10:53:30.253 回答
0

如果您希望名称真正通用,我会使用 addToQueue() 或 populateQueue() 因为将某些内容放入该对象似乎是该方法的重点。

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


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

于 2011-11-16T10:50:02.977 回答