Мышление в этом посте применимо как к классу, так и к модулям. Однако в этом посте я буду использовать слово класс.
Позвольте мне сначала рассказать вам о некоторых плохих и хороших примерах и показать вам полезные примечания в конце поста.
Уродливые способы именования модулей или классов
- 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 г.