【发布时间】:2015-03-12 09:24:22
【问题描述】:
我需要一个能够创建多个对象但在其中注入其他对象的工厂对象。 例如:
class MyFactory
{
public function createObjectA() {
return new ObjectA(new ObjectANeededObject1(), new ObjectANeededObject1());
}
public function createObjectB() {
return new ObjectB(new ObjectBNeededObject1(), new ObjectBNeededObject1());
}
}
我的工厂是否也应该实例化所需的对象(考虑到我的工厂可以创建任何对象)? 我是否应该通过注入将它们传递到我的工厂构造函数中(但构造函数将包含许多许多参数)? 我是否应该将它们作为参数传递给我的工厂方法(但是工厂客户端将知道应该如何创建要创建的对象,并且知道它不是它的责任)? 我的工厂应该创建对象构建器(能够创建我的对象及其所需的对象)而不是直接创建我的对象吗?
你有什么建议?
谢谢,
本
【问题讨论】:
-
现在是你开始阅读有关Dependency Injection Containers (DIC) 的时间了
-
谢谢马克。如果我理解得很好,容器将帮助我们创建不同的对象 ObjectXNeddedObjectY。但是,如果我没记错的话,那是同样的问题,我读到我不应该将我的容器提供给所有对象,而只是传递由容器创建的对象。那么我应该将我的所有对象 ObjectXNeddedObjectY(由我的容器创建)传递给我的工厂吗?
-
DIC 应该返回特定于要实例化的类的对象集合,然后工厂可以使用反射来实例化该集合,使用像
http://www.php.net/manual/en/reflectionclass.newinstanceargs.php这样的调用 -
不太明白你想用反射做什么,但你认为我的工厂应该包含 DI 容器吗?
标签: php design-patterns dependency-injection factory-pattern solid-principles