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

时间:2009-08-24 00:25:09

标签: .net design-patterns oop refactoring factory

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

所有实现都位于以下命名空间

  

Skim.Ssms.AddIn.ActiveFileExplorer.Loader

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

什么是专业人士和专业人士将工厂方法放在*.Loader或它的父命名空间中的缺点?我想根据优点/缺点做出的决定。



这是我项目的布局 alt text

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:5)

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

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

Loader
- DocumentLoaderFactory
- DocumentLoadType
- IDocumentLoader


Loader\Implementation
- NameDocumentLoader
- TypeDocumentLoader
- ConnectionDocumentLoader
- DocumentLoader

我假设DocumentLoader是一个抽象的基类,由于它的名字而继承了你的接口,但是你明白了。我不知道你的其他类是什么“TreeViewImageIndex”,但你可以将它放在任何一个地方或某个完全不同的地方(如果合适的话)。

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

答案 2 :(得分:2)

我想将它保留在**。Loader *命名空间中,因为它可以使您在使用 IDocumentLoader 实现时更容易找到。