我很快决定为我即将编写的新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范例。 也许某种工厂模式会有所帮助,但为每个小物体创建一个工厂类似乎对我来说有点过分了。?
答案 0 :(得分:4)
如何使用DbContext对象:
$dbContext = new DbContext($logger, $filter, $database, $session);
然后你的“汽车”是:
$car = new Car($dbContext, $color, $amountOfWheels);