Когда включать имя шаблона дизайна в имя класса?

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

  • ContextLazyFactory
  • RunOnceMediator
  • ThirdPartyMediator
  • MyProjectCliFacade
  • BinaryGate

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

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

Ответы

Ответ 1

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

  • Образцы дизайна называются для объяснения того, что они делают
  • Классы названы для объяснения того, что они делают

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

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

Ответ 2

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

GameLevelAbstract
InGameArea
MainMenu

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

Другим примером является мой графический фасад:

GraphicsFacade
OpenGLGraphics
DirectXGraphics

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

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

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

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

Ответ 3

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

Я когда-то видел класс под названием XxxxFactory (или что-то в этом роде), и он не имел никакого отношения к шаблону factory вообще!

Ответ 4

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

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

Ответ 5

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

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

Ответ 6

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

Ответ 7

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