Хаос хаоса классов

Я часто пытаюсь решить, как назвать класс. Не так много, потому что цель класса неясна, но из-за таких имен, как xxx *** Controller ***, xxx *** Manager ***, xxx *** Info ***, xxx *** Помощник ***, xxx *** Util *** и т.д., которые я вижу повсюду.

Если у меня есть класс, который загружает некоторые вещи через HTTP, я обычно называю его HttpUploader или что-то в этих строках. Я видел много примеров, когда аналогичный класс называется HttpUploadManager, HttpTransmissionController, HttpUploadHelper и т.д.

Я немного смущен, когда следует использовать Controller, Manager, Info и т.д. Есть ли какая-нибудь статья или книга, которые могут помочь мне стать лучшим пользователем классов?

PS: Кроме того, имя типа HttpSender звучит довольно анемично по сравнению с HttpTransmissionController или HttpDispatchManager: P

Ответ 2

Именование трудно, поэтому не беспокойтесь, что вы боретесь, потому что все мы делаем. И поверьте мне, это никогда не становится проще!

Лично со всем контроллером/менеджером/помощником/Util/Независимо от суффикса я склонен использовать правило, которое, если это соглашение (например, для ASP.NET MVC это означает, что имя класса контроллера заканчивается на "Контроллере" ) затем используйте суффикс, иначе попробуйте, как ад, чтобы этого избежать. Я бы предпочел класс HttpUploader, чем HttpUploadManager.

Самое важное в названии - это то, что класс должен делать то, что он говорит. Если это класс, который загружает что-то с помощью HTTP, то HttpUploader описывает его точно. Использование причудливого имени типа HttpUploadManager не говорит мне, что он делает. Выгружает ли она сама вещь? Он управляет загрузкой нескольких вещей? Мне нравится держать все как можно проще, описывая цель класса/метода/независимо.

Хорошее руководство, которое я нахожу, состоит в том, что если вы действительно пытаетесь назвать что-то, например, вы тратите много времени на размышления, и вы по-прежнему не можете перегонять то, что он делает, в разумное имя, тогда вам, вероятно, придется реорганизовать все, что угодно "пытаюсь назвать более мелкие, более конкретные компоненты.

Ответ 3

Если вам трудно выбрать имя, вы можете обратиться к ClassNamer.org.

Ответ 4

Вы также можете посмотреть список более описательных (красочных?) суффиксов: ManagerManager.

Проблема с обычным советом (назовите класс для того, что он делает) состоит в том, что многие вещи, которые класс не имеет, имеют хороший эквивалент реального мира, и поэтому наш традиционный словарь может не соответствовать хорошо. Например, HttpUploader может быть сопряжен с другим классом, который помогает с загрузкой, выполняя некоторую координацию или (осмеливаясь сказать это?) Управляет загрузкой. Такая посредническая координация распространена в программном обеспечении, но слова, чтобы описать ее, настолько расплывчаты, что они приглашают презрение.

Ответ 5

В книге Clean Code есть полная глава об именах переменных. Хороший материал.