关于php:依赖注入 – 是否有这个非常大的构造函数的替代?

Dependency injection - is there an alternative to this very large constructor?

不久,我决定为即将编写的新PHP应用程序使用依赖项注入技术。

但是,我不完全确定我是否理解它。我的问题是,基类依赖于各种项目,而许多不同的类需要对其进行扩展。例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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;
 }
}

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

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

例如,当创建"car"类的对象时,我可以这样做:

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

但这对我来说似乎相当混乱:

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

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


如何使用dbContext对象:

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

那么你的"车"是:

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