Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何命名只调用其他方法的类/方法?_Java_Principles_Responsibility - Fatal编程技术网

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

Java 如何命名只调用其他方法的类/方法?,java,principles,responsibility,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 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);
   }
}
公共类SomeClass{
私有提取器提取器=新提取器();
专用转换器=新转换器();
专用队列=新队列();
公共方法(列表){
容器tmp=提取器.extract(列表);
字符串结果=converter.convert(tmp);
queue.add(结果);
}
}
正如您所看到的,“someMethod”-方法调用extract、convert和add。我现在的问题是,如何调用这样的类/方法?它实际上不是提取、转换或添加,而是调用它们?
如果您以方法的职责命名方法,那将是什么?

听起来像某种生成器类。您以一种格式获取数据,将其转换,然后创建某种输出格式。“什么建筑商”怎么样

我假设有人否决了我,因为我忘了为这个方法提供一个好名字。很抱歉

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


“建设者”的替代品可能是“某种创造者”。显然,您会根据您的类实际创建的内容来命名它。

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

那么
processAndQueueMessage

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

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

(或者使用DI容器,如
Spring
Pico

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

但实际上在这个层次上,我会根据它试图实现的业务逻辑来命名它,在这种情况下,名称实际上取决于它的用途



如果你不能想出一个好名字,这表明你的过程抽象相当随意/人为,并且可能暗示有更好的方法。也许不是

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

你的
Converter
类没有
convert
方法,而是
extract
方法。我认为“进程”和“消息”增加了输入开销(为什么是‘message’?)没有添加太多信息。我更喜欢extractAndQueue(..)或queueExtracted(..)。但是,处理或提取可能需要一些不应该包含在方法名称中的实现细节。extractAndQueue,是的,我喜欢这个
final SomeClass myProcessor = new SomeClass(new MyExtractorImplementation(), new MyConverterImplementation());