Когда включать имя шаблона дизайна в имя класса?
Во время моего последнего проекта я заметил, что очень удобно включать имена шаблонов проектов в имена классов. Например:
- 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
Действительно полезно добавить имена шаблонов проектов в качестве имени класса. Что делает код более понятным. Имена классов должны быть значимыми и должны отражать функциональность класса. Когда вы добавляете имя шаблона в имя класса, он добавляет больше удобочитаемости, так как он также отражает технику, которая использовалась для разработки класса. Я предпочитаю такие типы имени класса.