如果一个类不是*总是*创建Foo对象,那么将它调用为FooFactory是错误的吗?

时间:2010-08-25 12:25:41

标签: c# design-patterns naming-conventions factory service-locator

如果一个类不是总是创建Foo对象,那么将它调用为FooFactory是错误的吗?例如,如果我有以下界面:

public interface IFooFactory
{
    Foo Create();
}

并按如下方式实施:

public class FooFactory : IFooFactory
{
    public IFoo Create()
    {
        return ServiceLocator.Current.GetInstance<IFoo>();
    }
}

然后这个类可能创建一个Foo,具体取决于我的IoC容器的配置方式。如果'XxxFacotry'名称应该保留给真正的工厂,我该怎么称呼我的界面和类?

显而易见的答案是IFooProvider,但我真的想避免'XxxProvider',因为它过度使用,因此太模糊了。另一方面,IFooServiceLocator太具体了。

非常感谢备选命名建议。

3 个答案:

答案 0 :(得分:3)

您的班级提供 IFilter,可能会也可能不会创建一个。我没有看到FilterProvider过于模糊。

如果你不喜欢它,那么FilterSource呢?

老实说,我认为称之为FilterFactory并不是那么糟糕;我的意思是,谁更关心它是如何实现的?如果有人调用您的Create方法,他们很可能会缓存结果,这使得他们知道Create是否实际实例化从零开始的对象。

无论哪种方式,正确的做法是记录您的班级的实际功能,包括与使用它的人相关的任何细节(并省略那些实际上不相关或不重要的细节)。

答案 1 :(得分:3)

如果它有时制作蛋糕,你会把饼干叫做工厂吗?

答案 2 :(得分:0)

到目前为止,似乎是50/50。所以我接受的答案是暗示'是的;如果总是创建新的Foo对象',那么将命名为FooFactory 是错误的,因为这是我自己喜欢的地方。