说我遵循单一责任原则,我有以下课程。
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会调用提取,转换和添加。我现在的问题是,你如何称呼这样的类/方法?它实际上并不是在提取,转换或添加,而是在调用它们? 如果你在责任之后命名该方法会是什么?
答案 0 :(得分:2)
好吧,因为您似乎添加了一个队列而且您没有返回任何我称之为addToQueue
的内容。转换+提取的事实是我认为不需要公开的实现细节。
答案 1 :(得分:1)
processAndQueueMessage
怎么样?
另外(不相关),您不应该在new
中创建(使用Extractor
)Converter
和SomeClass
,而应该注入它们(在施工时)或者在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容器,如Spring
或Pico
)
答案 2 :(得分:0)
听起来像某种类型的构建器类。您以一种格式获取数据,转换它然后创建某种输出格式。那么“SomethingSomethingBuilder”怎么样?
我假设有人向我倾倒,因为我忘了为这个方法提供一个好名字。对不起。
因此,此方法会将增量数据添加到构建器类中。我会称它为“Add”,“AddData”或“Push”(我可能会推送,因为它在许多标准类中具有非常相似的含义)。
“Builder”的替代方案可能是“SomeKindOfCreator”。显然,你会根据你的班级实际创建的内容来命名它。
答案 3 :(得分:0)
如果你想让这个名字变得非常通用,那么我会选择addToQueue()或populateQueue(),因为在这个对象中获取内容似乎是该方法的重点。
但实际上在那个级别我会通过它试图完成的业务逻辑来调用它,在这种情况下,这个名称实际上取决于它的用途。
如果你不能提出一个好名字,那就表明你的程序抽象是相当随意/人为的,并且可能暗示可能有更好的方法来做到这一点。或者可能不是。
答案 4 :(得分:0)
你要做的是考虑方法调用序列的复合含义,将其转换为简洁的动词或动词短语,并将其用作名称。如果你不能提出一个简洁的名字,那么你可以使用通用/中性名称(如“过程”)或使用完全虚假的东西(如“sploddify”)。