Прежде всего, ничего нет Неверный с тем, что делает. Многим нравится ставить один класс на заголовок, в общем. Если вам не нравится смотреть на множество заголовков, вы можете организовать их по каталогу или фильтру проекта дерева и т. Д.
Это все вопрос стиля. Пока функциональность нетронутая, лучший вариант - это функция смешного чувства у вас есть, и то же самое для людей, поддерживающих ваш код в будущем. Возможно, этот ответ может заставить это смешное чувство пойти на вас, а может и нет.
Во-вторых, это очень зависит от использования каждого класса. Если классы и Bar
малы, их можно поместить в заголовок, содержащий класс инкапсуляции. Возможно, добавьте объявление вперед для родительского класса и завершите объявление его в нижней части заголовка. Бонусные баллы, если они все связаны (например, FooConnection
является подклассом Foo
), потому что это сокращает пространство декларации.
Если они относительно небольшие классы, не может быть вреда при объявлении классов Foo
и Bar
в определении их базового класса. Тогда нет FooConnection
- это фактически Connection::FooConnection
. В этом случае Connection
не просто определяет базу для FooConnection
, ее владеет своим самым определением. Это означает, что каждый раз, когда вы используете FooConnection
в своем коде, вы думаете в контексте Connection
.I редко делаю это сам, в первую очередь потому, что мне не нравится набирать Connection::
все время, но также и потому, что так мало случаев, когда я использую только класс в одном контексте.
Если инкапсулированные классы protected
или private
, то они используются только самого родительского класса (и friend
классов и подклассов, может быть, что там у вас). Затем, так как ограниченный контекст установлен, и если объявления классов невелики (< 50 или < 100 строк), вы можете объявить FooConnection
и BarConnection
в пределах Connection
и по-прежнему поддерживать читаемость.
Бонусная точка: если вы заканчиваете объявление классов внутри классов, вы можете использовать разделение пространства имен. Я не знаю использования этих классов, но я предполагаю, что FooConnection
не является самим соединением, а Foo
, принадлежащим Collection
. Итак, вы можете объявить Foo
и класс Bar
для каждого из Widget
, Connection
и Config
.
Из наиболее распространенных моделей, выглядит наиболее, как «мост», как вы, кажется, пытаются отделить интерфейс объекта от его реализации. Ссылка: http://www.dofactory.com/net/bridge-design-pattern. Я не знаю, улучшит ли это дизайн, но, по крайней мере, это может показать, что ваш шаблон более распространен, чем вы думаете. Если вы не обеспокоены созданием объектов, то вы также должны изучить абстрактную фабрику. – Pieter21
Невозможно дать вам совет, просто видя структуру. Нам нужна информация о ролях этих классов и о том, что они должны делать и как они должны взаимодействовать. Если это будет шаблон MVC, я не вижу в этом ничего плохого. –
Лестница в небо. –