DDD Book,Eric Evans:“FACTORY应该被抽象为所需的类型而不是创建的具体类”。

时间:2010-02-03 19:00:20

标签: oop domain-driven-design factory-pattern

在Eric Evans的“领域驱动设计”一书中,在第6章“工厂”(第139页)一节中,它说明如下:

“任何优秀工厂的两个基本要求是:

...

“2.FACTORY应该被抽象为所需的类型,而不是创建的具体类。”

请您详细说明该声明对第2号基本要求的含义。

2 个答案:

答案 0 :(得分:10)

我认为这意味着你永远不应该从你的工厂返回具体类型。例如,如果你有一个接口,让我们说ISomething,一个anstract类SomethingBase,最后是一些实现这个接口并继承自基类的类。您的创建方法应该返回基类型的接口类型intead。我认为这就是主意。

public ISomething Create() { ... }

而不是

public SomethingBase Create() { ... }

我希望它有所帮助, 卡洛斯。

答案 1 :(得分:8)

Carlos Loth的回答是正确的,但您应该始终记得使用Abstract Factory,因为这样您就可以将具体工厂与具体类型相结合,而不会将消费者与具体工厂或类型联系起来。

public interface ISomethingFactory
{
    ISomething Create();
}

public class SomethingFactory : ISomethingFactory
{
    public ISomething Create()
    {
        return new Something();
    }
}