2012-02-18 5 views
2

У меня есть класс с именем 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 и т.д., но я хочу иметь consitency через мой API, где вы всегда начать писать all для списков объектов, так что вы получите помощь от, например, Intelli Sense.

+0

Я бы пошел на второй подход. Вы бы избежали проблем с перегрузкой метода. Или 'allRecordsBy (Фильтр)'. – user802421

+0

В чем проблема перегрузки? – LuckyLuke

+0

Оба варианта хороши. Как указано выше, если вы добавите перекрывающиеся аргументы, то именованный подход будет лучше. –

ответ

3

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

деятельностьLog.allRecordsByEnvironment (окружающая среда);

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

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

1

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

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

+0

Значит, вы не думаете, что имя длинное? – LuckyLuke

+2

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

+0

Я не ленись: =) Okey спасибо! – LuckyLuke

1

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

+0

+1 так же думает –

0

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

На мой взгляд, определение критериев во имя метода выглядит именования классов иерархией, как этот

Car -> BMW_Car -> X5_BMW_Car 
0

я бы первый.

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

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

+0

Вы, ребята, усложняют мне выбор:) – LuckyLuke

+0

Ну, я надеялся, что это упростит выбор. :) –

+0

Я вижу преимущества обоих подходов, не могу выбрать, ай жизнь тяжелая! – LuckyLuke

Смежные вопросы