Oop DDD图书,埃里克·埃文斯:“什么是”的意思;工厂应抽象为所需的类型,而不是创建的具体类;?
Eric Evans在《领域驱动设计》一书中的第6章“工厂”一节(第139页)中指出: “任何好工厂的两个基本要求是: "二,。工厂应抽象为所需的类型,而不是创建的具体类。”Oop DDD图书,埃里克·埃文斯:“什么是”的意思;工厂应抽象为所需的类型,而不是创建的具体类;?,oop,domain-driven-design,factory-pattern,Oop,Domain Driven Design,Factory Pattern,Eric Evans在《领域驱动设计》一书中的第6章“工厂”一节(第139页)中指出: “任何好工厂的两个基本要求是: "二,。工厂应抽象为所需的类型,而不是创建的具体类。” 请您详细说明一下关于基本要求2的声明是什么意思。我认为这意味着您永远不应该从工厂退回混凝土型号 例如,如果你有一个接口,比如说ISomething,一个抽象类SomethingBase,最后是一些实现这个接口并从基类继承的类。你的创建方法应该返回接口类型,而不是基类。我想这就是想法 public ISomething C
请您详细说明一下关于基本要求2的声明是什么意思。我认为这意味着您永远不应该从工厂退回混凝土型号 例如,如果你有一个接口,比如说
ISomething
,一个抽象类SomethingBase
,最后是一些实现这个接口并从基类继承的类。你的创建方法应该返回接口类型,而不是基类。我想这就是想法
public ISomething Create() { ... }
而不是
public SomethingBase Create() { ... }
我希望有帮助,
Carlos.Carlos Loth的回答是正确的,但您也应该始终记住使用,因为这将允许您将混凝土工厂耦合到混凝土类型,而无需将消费者耦合到混凝土工厂或类型
public interface ISomethingFactory
{
ISomething Create();
}
public class SomethingFactory : ISomethingFactory
{
public ISomething Create()
{
return new Something();
}
}
谢谢你的快速回复。虽然我仍然有点困惑,因为书的后面(第143页底部)也说:“工厂与产品的具体类别相结合;“幸运的是,我是用php开发的,因此“返回类型”在技术上不是一个太大的问题(尽管在概念上仍然很重要)我认为它是这样说的,因为在大多数情况下,您将使用新操作符在Create方法内实例化具体类。因此,您将在creational方法和具体类型之间具有强耦合。您的使用者不一定会引用具体类型,只会引用接口。但是工厂类将需要引用我想我明白了。所以,基本上利用各种创作模式(GoF)使工厂类的签名和返回类型尽可能通用,以屏蔽具体的特定实现。但是,只要接口是通用的,您仍然可以拥有绑定到具体域对象的工厂类。因此,LampshadeFactory和SofaFactory只要隐藏在FurnitureF后面,就仍然可以actory的抽象接口。