gpt4 book ai didi

php - 依赖注入(inject) - 这个非常大的构造函数有替代方案吗?

转载 作者:可可西里 更新时间:2023-11-01 01:09:39 24 4
gpt4 key购买 nike

不久我决定为我即将编写的新 PHP 应用程序采用依赖注入(inject)技术。

但是,我不完全确定我是否理解得足够多。我的问题是,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 = new Car($color,$amountOfWheels);

但这对我来说似乎相当困惑:


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

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

最佳答案

如何使用 DbContext 对象:

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

那么你的“车”是:

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

关于php - 依赖注入(inject) - 这个非常大的构造函数有替代方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4048196/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com