听完后整洁代码讲座 https://www.youtube.com/playlist?list=PL693EFD059797C21E,我开始明白我们应该使用工厂来组合对象。因此,举例来说,如果House
has a Door
and a Door
has a DoorKnob
, in HouseFactory
我们创建一个新的DoorKnob
并将其传递给构造函数Door
,然后传递新的Door
对象的构造函数House
.
但是使用的类呢?House
(假设班级名称是ABC
)?这将取决于HouseFactory
, 正确的?那么我们是否通过HouseFactory
在构造函数中ABC
?我们是否必须以这种方式在构造函数中传递大量工厂?
继续使用 Door 和 DoorKnob 示例,您不注入工厂 - 您注入 DooKnob 本身:
public class Door
{
private readonly DoorKnob doorKnob;
public Door(DoorKnob doorKnob)
{
if (doorKnob == null)
throw new ArgumentNullException("doorKnob");
this.doorKnob = doorKnob;
}
}
这一层看不到任何工厂。
另一方面,House 依赖于 Door,但不依赖于 DoorKnob:
public class House
{
private readonly Door door;
public House(Door door)
{
if (door == null)
throw new ArgumentNullException("door");
this.door = door;
}
}
这使得选项保持开放,直到最后你have组成应用程序中的所有内容成分根 http://blog.ploeh.dk/2011/07/28/CompositionRoot.aspx:
var house = new House(new Door(new DoorKnob()));
您可以使用 DI 容器在此级别进行组合,但并非必须这样做。没有工厂参与其中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)