Поскольку код, использующий ваши фабричные потребности, абсолютно не знает реализации в шаблоне абстрактной фабрики, я обычно помещаю интерфейс и фабрику (плюс любую информацию о типе) в корень, а затем реализации в свои собственные папки ( или папка, если их мало).
Так что в вашем случае у меня есть что-то вроде:
Loader
- DocumentLoaderFactory
- DocumentLoadType
- IDocumentLoader
Loader\Implementation
- NameDocumentLoader
- TypeDocumentLoader
- ConnectionDocumentLoader
- DocumentLoader
Я предположил, что DocumentLoader - это абстрактный базовый класс, который наследует ваш интерфейс из-за его имени, но вы поняли идею. Я не знаю, для чего предназначен ваш другой класс TreeViewImageIndex, но вы можете поместить его в любое место или в другое место, если это уместно.
Это делает ваш код красивым и связным, не требует, чтобы ваш реализующий класс знал о пространстве имен Loader \ Practice, и позволяет легче читать дерево документа.