Когда включать имя шаблона дизайна в имя класса? - PullRequest
15 голосов
/ 23 марта 2009

Во время моего последнего проекта я заметил, что очень удобно включать имена шаблонов проектирования в имена классов. Например:

  • ContextLazyFactory
  • RunOnceMediator
  • ThirdPartyMediator
  • MyProjectCliFacade
  • BinaryGate

Это облегчает чтение проекта. Дополнительным преимуществом является то, что вы не будете использовать собственные имена, такие как «RunOnceManager», «ContextDelayedConstruction», «ThirdPartyInterface» и т. Д., Которые могут иметь резкое значение только для автора. С другой стороны, я бы не хотел видеть такие классы, как vector_container, в STL. Как вы думаете?

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

Ответы [ 7 ]

22 голосов
/ 23 марта 2009

Во многих случаях мне кажется естественным:

  • Шаблоны дизайна названы так, чтобы объяснить, что они делают
  • Классы названы, чтобы объяснить, что они делают

Когда самый простой способ объяснить цель класса в терминах шаблонов проектирования, почему бы не использовать его?

С другой стороны, когда шаблон проектирования в основном случайный , исключите его. Например, класс может быть одноэлементным, но это не является его главной целью в жизни, поэтому я не ожидаю увидеть в названии слово «Singleton» Сравните это с фабрикой, основной целью которой является фабрика для других объектов - «FooFactory» имеет смысл.

1 голос
/ 23 марта 2009

Я думаю, использование шаблонов дизайна в именах - это замечательная идея. Например, в одной из моих игр у меня есть:

GameLevelAbstract
InGameArea
MainMenu

Вторые два класса (InGameArea и MainMenu) подкласс GameLevelAbstract и реализуют его чисто виртуальные методы. Я могу видеть из своего исходного кода, что этот класс абстрактный, и сразу знаю, что это или не то, что я ищу.

Другой пример - мой графический фасад:

GraphicsFacade
OpenGLGraphics
DirectXGraphics

Точно такая же настройка, как у меня выше, за исключением того, что она работает с графикой.

Я считаю использование шаблона дизайна в названии полезным и информативным, когда я ищу класс. Я действительно считаю, что некоторые вещи не должны использоваться в названии, например Singleton, однако Flyweight, Factory или Facade являются примерами названий конструкций, которые, я думаю, хорошо вписываются в имя класса, реализующего эти шаблоны.

Я думаю, что если вы используете хорошие имена классов, которые помогают программисту понять, что делает ваш класс с первого взгляда, это хорошая вещь.

Я не думаю, что указание чего-либо - это структура данных или алгоритм, в большинстве случаев - это хорошо. «LinkedListDataStructure» или «BubbleSortAlgorithm» ничего не добавляют к пониманию программистом класса, поскольку «LinkedList» очевиден в его функции.

0 голосов
/ 18 апреля 2014

Действительно хорошо добавлять имена шаблонов дизайна в качестве имени класса. Что делает код более простым для понимания. Имена классов должны быть осмысленными, и это должно отражать функциональность класса. Когда кто-то добавляет имя шаблона в имя класса, он добавляет больше читаемости, поскольку он также отражает технику, которая использовалась для разработки класса. Я предпочитаю этот тип имени класса.

0 голосов
/ 07 мая 2011

Существует как минимум один недостаток: если по какой-либо причине класс не использует шаблон после рефакторинга, вы должны либо переименовать его, либо создать класс с неправильным именем.

0 голосов
/ 23 марта 2009

Если полученное имя достаточно ясное, используйте его.

Но могут быть обстоятельства, когда полученное имя будет либо неуклюжим, либо расплывчатым. В этом случае используйте наиболее подходящее имя.

0 голосов
/ 23 марта 2009

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

Векторы уже означают для меня коллекцию, поэтому нет необходимости в _collection. Кстати, контейнер не является дизайнерским паттерном.

0 голосов
/ 23 марта 2009

Я согласен с вами. Единственное, что я хотел бы добавить (что само собой разумеется), это убедиться, что имя шаблона в имени класса действительно использует фактический используемый шаблон.

Однажды я увидел класс под названием XxxxFactory (или что-то подобное), и он не имел никакого сходства с фабричным шаблоном!

...