Как вы называете класс / метод, который вызывает только другие методы?
Скажем, я следую принципу единой ответственности, и у меня есть следующие классы.
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 ответов
Ну, так как вы, кажется, добавляете в очередь и ничего не возвращаете, я бы назвал это addToQueue
, Тот факт, что вы конвертируете + извлекаете, - это детали реализации, которые, я думаю, не нужно раскрывать.
Как насчет processAndQueueMessage
?
Кроме того (не связано), вы не должны создавать (используя new
) Extractor
а также Converter
в вашем 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);
}
}
И вы создаете это с помощью:
final SomeClass myProcessor = new SomeClass(new MyExtractorImplementation(), new MyConverterImplementation());
(Или используйте DI-контейнер, например, Spring
или же Pico
)
Что вы делаете, это думаете о составном значении последовательности вызовов методов, превращаете это в краткий глагол или фразу глагола и используйте это как имя. Если вы не можете придумать краткое имя, тогда вы можете использовать общее / нейтральное имя (например, "процесс") или использовать что-то полностью поддельное (например, "sploddify").
Если вы хотите, чтобы имя было действительно универсальным, я бы использовал addToQueue() или populateQueue(), поскольку получение чего-либо в этот объект, похоже, является целью метода.
Но на самом деле на этом уровне я бы назвал это тем, какую бизнес-логику он пытается реализовать, и в этом случае имя действительно зависит от того, для чего оно используется.
Если вы не можете придумать хорошее имя, это указывает на то, что ваша процедурная абстракция является довольно произвольной / искусственной, и возможный намек на то, что может быть лучший способ сделать это. А может и нет.
Похоже, какой-то класс строителей. Вы получаете данные в одном формате, конвертируете их и затем создаете какой-то формат вывода. Так как насчет "SomethingSomethingBuilder"?
Я предполагаю, что кто-то осудил меня, потому что я забыл дать хорошее имя для метода. Извини за это.
Таким образом, этот метод постепенно добавляет данные в ваш класс построителя. Я бы назвал это "Add", "AddData" или "Push" (я бы, вероятно, пошел с push, потому что это имеет очень похожее значение во многих стандартных классах).
Альтернативой "Builder" может быть "SomeKindOfCreator". Очевидно, вы бы назвали его исходя из того, что на самом деле создает ваш класс.