Лучший способ назвать методы, которые возвращают список объектов - PullRequest
2 голосов
/ 18 февраля 2012

У меня есть класс с именем ActivityLog.Этот класс содержит список ActivityRecords.Я хочу вернуть список ActivityRecords по следующим критериям: среда и состояние.Должно ли название метода включать «критерии»?См. Пример:

activityLog.allRecords();
activityLog.allRecordsBy(Environment environment);
activityLog.allRecordsBy(Condition condition);
activityLog.allRecordsBy(Condition condition, Environment environment);

или

activityLog.allRecordsByEnvironment(Environment environment);
activityLog.allRecordsByCondtion(Condition condition);

Я, вероятно, думаю, что первое лучше, потому что вы прочитаете имя метода и поймете из параметра, что он делает, но я могубыть неправым?Что является лучшим или есть даже лучшие альтернативы?

Я мог бы также назвать методы records(), recordsBy и т. Д., Но я хочу получить согласование через мой API, где вы всегда начинаете писатьall для списков объектов, чтобы вы могли получить помощь, например, от Intelli Sense.

Ответы [ 5 ]

3 голосов
/ 18 февраля 2012

Мне нравится помещать критерии в фактическое название метода.Поэтому я бы использовал:

activityLog.allRecordsByEnvironment (Environment environment);

Для меня правильное именование метода выражает небольшую сводку того, что делает метод.Поскольку параметры включены в сигнатуру метода, я бы не стал рассматривать параметры как часть фактического имени, поэтому отсутствие размещения критериев в имени дает пользователю API неполную информацию о функциональности методов.(ИМО)

Я приветствую ваши усилия по практике самодокументирования кода, отличная практика.

1 голос
/ 18 февраля 2012

Мне нравится перегруженный вариант (ваш первый пример), потому что он сообщает, что все методы связаны и предоставляют в значительной степени одинаковую функциональность, иначе вы возвращаете записи, отфильтрованные по некоторым критериям.Вы увидите примеры этого во многих библиотеках с открытым исходным кодом и даже в самом SDK.

1 голос
/ 18 февраля 2012

Я бы отнесся к этому так же, как к static factory methods, которые являются именованными конструкторами . И там не только параметр говорит, что этот метод делает, его имя делает это сам. Поэтому я бы выбрал 2-й вариант.

@ Боб, из-за слишком длинных имен - даже если вы добавите в его имя 2 параметра, для меня все равно будет в порядке. В любом случае вам следует избегать использования методов с более чем 3 параметрами. Следование этому правилу предотвратит длинные имена ваших методов.

0 голосов
/ 18 февраля 2012

Я бы взял первый.

Если эти методы выполняют одну и ту же функцию или предоставляют одинаковую функциональность, тогда они должны иметь одинаковые имена. Но имейте ввиду, что эффективные элементы Java 41 и 42. Вы должны убедиться, что хотя бы один соответствующий параметр перегруженного метода имеет радикально разные типы.

2-й подход становится ужасно очень быстрым с каждым добавленным параметром. Я часто вижу это на уроках Брокера на работе. Есть люди, пишущие такие методы, как findByFirstnameAndLastnameAndBirthdayOrderByUgliness(blablub). Без комментариев.

0 голосов
/ 18 февраля 2012

Методы в OOP представляют поведение, поэтому я бы назвал их всех getRecords() и сделал их перегруженными.

По моему мнению, указание критериев в имени метода выглядит как присвоение имен иерархическим классам следующим образом

Car -> BMW_Car -> X5_BMW_Car
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...