依赖注入 - 是否有这个非常大的构造函数的替代?

时间:2010-10-29 00:37:25

标签: php dependency-injection

我很快决定为我即将编写的新PHP应用程序使用依赖注入技术。

但是,我并不完全确定我理解得足够多。我的问题是,baseClass依赖于各种项目,而许多不同的类需要扩展它。例如:


namespace system;

class baseClass
{
 protected $logger;
 protected $filter;
 protected $database;
 protected $session;


 public function __construct(LoggerInterface $logger, filterInterface $filter, databaseInterface $database, sessionInterface $session)
 {
  $this->logger = $logger;
  $this->filter = $filter;
  $this->database = $database;
  $this->session = $session;
 }
}

大多数类都需要记录器,过滤器等来完成他们的工作:例如,过滤器类处理转义/验证,这是我在整个项目中需要的东西。

我预测的问题是,当(几乎)所有对象都扩展这个baseClass时,每次我需要实例化一个非常简单的类(但不是那么简单,不需要上面描述的那些项目)我得去处理一个可能需要很多参数的构造函数。

例如,当创建类'car'的对象时,这对我来说没问题:


$car = new Car($color,$amountOfWheels);

但这对我来说似乎很混乱:


$car = new Car($logger, $filter, $database, $session, $color, $amountOfWheels);

我正在寻找这个问题的解决方案,当然不会违反DI范例。 也许某种工厂模式会有所帮助,但为每个小物体创建一个工厂类似乎对我来说有点过分了。?

1 个答案:

答案 0 :(得分:4)

如何使用DbContext对象:

$dbContext = new DbContext($logger, $filter, $database, $session);

然后你的“汽车”是:

$car = new Car($dbContext, $color, $amountOfWheels);