Мышление в этом посте применимо как к классу, так и к модулям. Однако в этом посте я буду использовать слово класс.

Позвольте мне сначала рассказать вам о некоторых плохих и хороших примерах и показать вам полезные примечания в конце поста.

Уродливые способы именования модулей или классов

  • myClass: ленивые способы именования классов. Он четко отвечает своей цели?
  • Все, к чему добавляются общие слова, такие как Менеджер, Помощники, Информация, Данные, Сведения, Утилита.
  • CSVHelper: это форматирование, сериализация, преобразование данных в CSV? Вы уверены, что он отвечает на вопросы?
  • XMLUtility: то же, что и выше.
  • JSONManager
  • AppointmentEntity: это объект Transfer?
  • AppointmentBO (BO: бизнес-объект; разве в вашем языке программирования нет пространства имен или пакета?)
  • Обычные, Утилиты, Помощники: Ух ты! Скидывай сюда весь мусор. Класс магнита, привлекающий всех ленивых разработчиков. Они совершают свои грехи в этом классе.
  • Процессор
  • StudentData, StudentDetails, StudentInfo, StudentInformation: Что произойдет, если я просто укажу имя: «Студент»? Это тоже часть информации о студентах, не так ли?
  • КК:избегайте сокращений. Мы здесь, чтобы решить проблему и облегчить сотрудничество внутри команды. Избегайте сокращений.
  • Пакетное задание. Это базовый класс для всех заданий, которые можно ставить в очередь в пакетном режиме. Означает ли это что-либо, связанное с базовым классом?
  • JWTAuthentication: кричите ли вы другим о реализации?

Давайте рассмотрим несколько хороших примеров именования классов.

Более чистые способы именования классов:

  • Назначение: у вас есть способы найти свои классы с помощью пространства имен, поэтому вместо добавления общих слов, таких как Entity, или BO, или AppointmentEntity, используйте пространства имен с умом.

  • DateFormatter: форматирует дату на основе заданного формата. Имеет больше смысла, чем DateHelper или DateUtility, верно?
  • MeetupSerializer: сериализует объект встречи в строковое представление. Интуитивный?
  • DocumentFileStorage: рассказывает о своей основной цели, такой как чтение/запись документа в файловую систему.
  • UserRepository: сообщает, что это шаблон репозитория для пользователя. Если ваш язык поддерживает универсальные шаблоны, лучшим решением может быть Repository‹User›.
  • MoneyFormatter: форматирует деньги.
  • ColorCodeProvider.getColorCode(значение). Он дает вам цветовой код для данного значения.
  • QualityCheck лучше, чем QC
  • StudentProgramSearch. Объект поиска, который содержит поля, относящиеся к учащемуся и его образовательной программе.
  • StudentValidator.
  • Регистратор
  • ControllerFactory: создает контроллеры.
  • UpdateCommandSanitizer: он должен игнорировать некоторые поля из пользовательского ввода, такие как поля CreatedAt и UpdatedAt, и подготавливать команду обновления для обновления других полей.
  • PersonDataSanitizer. Он очищает некоторые поля пользователя, такие как телефон, электронная почта, адрес, и отправляет данные для остальных полей.

Дать имя классу — это искусство. Чтобы научиться этому искусству, я бы порекомендовал вам прочитать, понять и применить: Принцип абстракции, сплоченности и единой ответственности. Вам также необходимо понимать соглашения используемой вами структуры, например. MVC, а также изучить шаблоны проектирования.

Не забудьте задать эти вопросы, называя класс.

  • Описывает ли название вашего класса его основную цель? и делать только эти вещи? Пример: Абстрактные типы данных, такие как Стек, Очередь и т. д.
  • Отвечает ли ваш класс на ваши вопросы, например что он делает? Вместо как дела?
  • Назовите свои классы, используя существительное, в соответствии с их доменом и архитектурным значением.
  • Чего вы хотите достичь? Задавайте повторяющиеся вопросы. Например, Форматировать? какое вид форматирования? Деньги? Тогда имя должно быть MoneyFormatter…. Аналогично, Преобразование документа в JSON? Хорошо, но зачем вы это делаете? Вы хотите сериализовать документ? Затем его следует назвать DocumentSerializer, а не JsonConverter.
  • Можно ли рассматривать курс как черный ящик? Видимость участников? Используйте диаграммы классов для ясности.
  • Делает ли класс предположения о потребителе этого класса?
  • Название вашего класса кажется вам более общим или конкретным?

Первоначально опубликовано на https://beingcraftsman.com 15 января 2019 г.