Придумывать хорошие, точные названия для классов, как известно, сложно. Если все сделано правильно, это делает код более самодокументируемым и предоставляет словарь для рассуждений о коде на более высоком уровне абстракции.
Классам, реализующим конкретный шаблон проектирования, можно дать имя на основе хорошо известного имени шаблона (например, FooFactory, FooFacade), а классы, которые непосредственно моделируют концепции предметной области, могут брать свои имена из проблемной области, но как насчет других классов? Есть ли что-нибудь вроде тезауруса программиста, к которому я могу обратиться, когда мне не хватает вдохновения и я хочу избежать использования общих имен классов (например, FooHandler, FooProcessor, FooUtils и FooManager)?
Ответы:
Я процитирую несколько отрывков из « Паттернов реализации » Кента Бека:
Простое имя суперкласса
Квалифицированное имя подкласса
Интерфейс
Для более подробного обсуждения покупайте книгу! Это стоит того! :)
источник
Всегда выбирайте MyClassA, MyClassB - это обеспечивает хорошую альфа-сортировку.
Я шучу!
Это хороший вопрос, и я столкнулся с ним не так давно. Я реорганизовывал свою кодовую базу на работе, и у меня возникли проблемы с тем, где что разместить и как это назвать ...
Реальная проблема?
У меня слишком много уроков. Если вы попытаетесь придерживаться принципа единой ответственности , все станет намного лучше. Вместо одного монолитного класса PrintHandler вы можете разбить его на PageHandler , PageFormatter (и т. Д.), А затем создать мастер- класс Printer, который объединяет все вместе.
В моей реорганизации у меня ушло время, но в итоге я собрал много дублированного кода, сделал свою кодовую базу намного более логичной и чертовски многому научился, когда дело доходит до размышлений, прежде чем добавлять дополнительный метод в класс: D
Однако я бы не рекомендовал помещать такие вещи, как имена шаблонов в имя класса. Интерфейс классов должен сделать это очевидным (например, скрыть конструктор для синглтона). В общем имени нет ничего плохого, если класс служит общей цели.
Удачи!
источник
В превосходной речи Джоша Блоха о хорошем дизайне API есть несколько хороших советов:
Если ваша проблема заключается в том, как назвать открытые внутренние классы, возможно, вам следует объединить их в более крупный класс.
Если ваша проблема заключается в именовании класса, который выполняет много разных функций, вам следует подумать о том, чтобы разбить его на несколько классов.
Если это хороший совет для общедоступного API, то для любого другого класса он не повредит.
источник
Если вы застряли с названием, иногда просто дать ему какое - нибудь полубезумное имя с обязательством пересмотреть его позже - хорошая стратегия.
Не получайте именной паралич. Да, имена очень важны, но они недостаточно важны, чтобы тратить на это много времени. Если вы не можете придумать хорошее имя за 10 минут, продолжайте.
источник
Если хорошее имя не приходит мне в голову, я, вероятно, задаюсь вопросом, есть ли более глубокая проблема - служит ли класс благой цели? Если это так, дать ему название должно быть довольно просто.
источник
Если ваш "FooProcessor" действительно обрабатывает foos, то не откажитесь дать ему такое имя только потому, что у вас уже есть BarProcessor, BazProcessor и т. Д. В случае сомнений, очевидное лучше. Другие разработчики, которым необходимо прочитать ваш код, могут не использовать тот же тезаурус, что и вы.
Тем не менее, для этого конкретного примера не повредит конкретизация. «Процесс» - довольно широкое слово. Например, действительно ли это «FooUpdateProcessor» (который может стать «FooUpdater»)? Вам не нужно слишком «изобретательно» подходить к именованию, но если вы написали код, вы, вероятно, имеете довольно хорошее представление о том, что он делает, а что нет.
Наконец, помните, что простое имя класса - это не все, что вам и читателям вашего кода нужно использовать - обычно в игре также присутствуют пространства имен. Они часто могут дать читателям достаточно контекста, чтобы ясно понять, для чего действительно нужен ваш класс, даже если его простое имя является довольно общим.
источник