工厂类属于哪个命名空间?

dan*_*die 6 .net oop refactoring design-patterns factory

我有一个工厂类,DocumentLoaderFactory它只返回一个实现接口的实例IDocumentLoader.

所有实现都驻留在以下命名空间下

Skim.Ssms.AddIn.ActiveFileExplorer.Loader

但我想知道的是,哪个命名空间确实DocumentLoaderFactory属于哪个?我现在已将工厂类放在*.Loader命名空间下,但它正在从ActiveFileWindow父命名空间的用户控件()中使用,Skim.Ssms.AddIn.ActiveFileExplorer如下所示.

将工厂方法置于*.Loader其父级命名空间中的优缺点是什么?我想根据利弊做出决定.



这是我项目的布局 替代文字

jri*_*sta 8

我会说最好将你的工厂与他们创造的类型共存.工厂是某种东西的提供者,应该与它提供的东西相关联和接近.如果你遵循凝聚力的规则,那么你会得出同样的结论.相关的事情应该紧密结合在一起,以保持一致的API.


Odd*_*Odd 5

因为使用工厂需要的代码完全不了解抽象工厂模式中的实现,所以我通常将接口和工厂(以及任何类型信息)放入根目录,然后将实现放入自己的文件夹(或文件夹中)很少有).

所以在你的情况下,我有类似的东西:

Loader
- DocumentLoaderFactory
- DocumentLoadType
- IDocumentLoader


Loader\Implementation
- NameDocumentLoader
- TypeDocumentLoader
- ConnectionDocumentLoader
- DocumentLoader
Run Code Online (Sandbox Code Playgroud)

我假设DocumentLoader是一个抽象的基类,因为它的名字而继承了你的接口,但是你明白了.我不知道你的其他类是什么"TreeViewImageIndex",但你可以把它放在任何一个地方或某个完全不同的地方,如果它是合适的.

这使您的代码保持良好和凝聚力,不需要您的实现类了解Loader\Implementation命名空间,并使您的文档树更易于阅读.