dan*_*die 6 .net oop refactoring design-patterns factory
我有一个工厂类,DocumentLoaderFactory
它只返回一个实现接口的实例IDocumentLoader
.
所有实现都驻留在以下命名空间下
Skim.Ssms.AddIn.ActiveFileExplorer.Loader
但我想知道的是,哪个命名空间确实DocumentLoaderFactory
属于哪个?我现在已将工厂类放在*.Loader
命名空间下,但它正在从ActiveFileWindow
父命名空间的用户控件()中使用,Skim.Ssms.AddIn.ActiveFileExplorer
如下所示.
将工厂方法置于*.Loader
其父级命名空间中的优缺点是什么?我想根据利弊做出决定.
这是我项目的布局
我会说最好将你的工厂与他们创造的类型共存.工厂是某种东西的提供者,应该与它提供的东西相关联和接近.如果你遵循凝聚力的规则,那么你会得出同样的结论.相关的事情应该紧密结合在一起,以保持一致的API.
因为使用工厂需要的代码完全不了解抽象工厂模式中的实现,所以我通常将接口和工厂(以及任何类型信息)放入根目录,然后将实现放入自己的文件夹(或文件夹中)很少有).
所以在你的情况下,我有类似的东西:
Loader
- DocumentLoaderFactory
- DocumentLoadType
- IDocumentLoader
Loader\Implementation
- NameDocumentLoader
- TypeDocumentLoader
- ConnectionDocumentLoader
- DocumentLoader
Run Code Online (Sandbox Code Playgroud)
我假设DocumentLoader是一个抽象的基类,因为它的名字而继承了你的接口,但是你明白了.我不知道你的其他类是什么"TreeViewImageIndex",但你可以把它放在任何一个地方或某个完全不同的地方,如果它是合适的.
这使您的代码保持良好和凝聚力,不需要您的实现类了解Loader\Implementation命名空间,并使您的文档树更易于阅读.