Давным-давно я прочитал статью (я полагаю, запись в блоге), которая поставила меня на «правильный путь» в отношении именования объектов: будьте очень скрупулезны в отношении именования объектов в вашей программе.
Например, если бы мое приложение (как типичное бизнес-приложение) обрабатывало пользователей, компании и адреса, у меня были бы классы a User
, a Company
и Address
domain - и, возможно, где-то всплыли бы a UserManager
, a CompanyManager
и an AddressManager
, которые обрабатывают эти вещи.
Так что вы можете сказать, что эти UserManager
, CompanyManager
и AddressManager
делать? Нет, потому что Менеджер - это очень очень общий термин, который подходит для всего, что вы можете делать с объектами вашего домена.
В статье, которую я прочитал, рекомендуется использовать очень конкретные имена. Если бы это было приложение C ++, а UserManager
задачей было выделение и освобождение пользователей из кучи, оно не управляло бы пользователями, а охраняло их рождение и смерть. Хм, может быть , мы могли бы назвать это UserShepherd
.
Или, может быть UserManager
, задача состоит в том, чтобы исследовать данные каждого объекта пользователя и криптографически подписывать данные. Тогда мы будем иметь UserRecordsClerk
.
Теперь, когда эта идея застряла у меня, я пытаюсь применить ее. И найти эту простую идею удивительно сложно.
Я могу описать то, что делают классы, и (пока я не погружаюсь в быстрое и грязное кодирование) классы, которые я пишу, делают только одно . То, что я упускаю, чтобы перейти от этого описания к именам, это своего рода каталог имен, словарь, который сопоставляет понятия с именами.
В конечном счете, я хотел бы иметь что-то вроде каталога шаблонов (часто шаблоны проектирования легко предоставляют имена объектов, например, фабрику )
- Factory - создает другие объекты (наименования взяты из шаблона проектирования)
- Пастух - Пастух управляет временем жизни объектов, их созданием и отключением.
- Синхронизатор - копирует данные между двумя или более объектами (или иерархиями объектов)
Няня - Помогает объектам достигать «пригодного для использования» состояния после создания - например, путем подключения к другим объектам
и т. д.
Итак, как вы решаете эту проблему? У вас есть постоянный словарный запас, вы придумываете новые имена на лету или считаете, что называть вещи не так важно или неправильно?
PS: меня также интересуют ссылки на статьи и блоги, обсуждающие эту проблему. Для начала вот оригинальная статья, которая заставила меня задуматься об этом: именование классов Java без «менеджера»
Обновление: резюме ответов
Вот небольшое резюме того, что я узнал из этого вопроса в то же время.
- Старайтесь не создавать новые метафоры (няня)
- Посмотрите, что делают другие фреймворки
Другие статьи / книги на эту тему:
- Какие имена вы регулярно посещаете / добавляете на занятия?
- Каков наилучший подход к именованию классов?
- Книга: Шаблоны проектирования: элементы многоразового объектно-ориентированного программного обеспечения (в твердом переплете)
- Книга: Шаблоны корпоративной архитектуры приложений (в твердом переплете)
- Книга: Образцы реализации (Мягкая обложка)
И текущий список префиксов / суффиксов имен, которые я собрал (субъективно!) Из ответов:
- координатор
- строитель
- писатель
- читатель
- укротитель
- Контейнер
- протокол
- цель
- конвертер
- контроллер
- Посмотреть
- завод
- сущность
- ведро
И хороший совет для дороги:
Не получайте именной паралич. Да, имена очень важны, но они не настолько важны, чтобы тратить на них огромное количество времени. Если вы не можете придумать хорошее имя за 10 минут, двигайтесь дальше.