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

JW.*_*JW. 7 oop domain-driven-design factory-pattern

在埃里克·埃文斯的"领域驱动设计"一书的第6章"工厂"(第139页)一节中,它说明如下:

"任何优质工厂的两个基本要求是:

...

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

您能否详细说明关于基本要求2的声明的含义.

CAR*_*OTH 11

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

public ISomething Create() { ... }
Run Code Online (Sandbox Code Playgroud)

代替

public SomethingBase Create() { ... }
Run Code Online (Sandbox Code Playgroud)

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

  • 我认为这是因为在大多数情况下,您将使用new运算符在Create方法中实例化具体类.因此,您将在创建方法和具体类型之间建立强大的耦合.您的消费者不一定会参考具体类型,只能参考界面.但是工厂类需要参考具体类型. (4认同)

Mar*_*ann 8

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

public interface ISomethingFactory
{
    ISomething Create();
}

public class SomethingFactory : ISomethingFactory
{
    public ISomething Create()
    {
        return new Something();
    }
}
Run Code Online (Sandbox Code Playgroud)