Как вы называете класс / метод, который вызывает только другие методы? - PullRequest
4 голосов
/ 16 ноября 2011

Скажите, что я следую принципу единой ответственности, и у меня есть следующие классы.

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 вызывает извлечение, преобразование и добавление. Мой вопрос сейчас, как вы называете такой класс / метод? Это на самом деле не извлечение, преобразование или добавление, но это вызывает те? Если бы вы назвали метод в честь его ответственности, что бы это было?

Ответы [ 5 ]

2 голосов
/ 16 ноября 2011

Ну, так как вы, кажется, добавляете в очередь и ничего не возвращаете, я бы назвал это addToQueue.Тот факт, что вы конвертируете + извлекаете, - это детали реализации, которые, я думаю, не нужно раскрывать.

1 голос
/ 16 ноября 2011

А как насчет 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)

0 голосов
/ 16 ноября 2011

Что вы делаете, это думаете о составном значении последовательности вызовов методов, превращаете его в краткий глагол или фразу глагола и используйте это как имя. Если вы не можете придумать краткое имя, тогда вы можете использовать общее / нейтральное имя (например, «процесс») или использовать что-то полностью поддельное (например, «sploddify»).

0 голосов
/ 16 ноября 2011

Если вы хотите, чтобы имя было действительно родовым, я бы использовал addToQueue () или populateQueue (), поскольку получение чего-либо в этот объект, похоже, является точкой метода.

Но на самом деле это такЯ бы назвал это тем, какую бизнес-логику он пытается выполнить, и в этом случае имя действительно зависит от того, для чего оно используется.


Если вы не можете придумать хорошее имя,это признак того, что ваша процедурная абстракция является довольно произвольной / искусственной, и возможный намек на то, что может быть лучший способ сделать это.А может и нет.

0 голосов
/ 16 ноября 2011

Звучит как некий класс строителей.Вы получаете данные в одном формате, конвертируете их и затем создаете какой-то формат вывода.Так как насчет «SomethingSomethingBuilder»?

Я предполагаю, что кто-то отверг меня, потому что я забыл назвать хорошее имя для метода.Извините за это.

Так что этот метод постепенно добавляет данные в ваш класс построителя.Я бы назвал это «Add», «AddData» или «Push» (я бы, вероятно, пошел с push, потому что во многих стандартных классах это имеет очень похожее значение)."SomeKindOfCreator".Очевидно, вы бы назвали его исходя из того, что на самом деле создает ваш класс.

...