我最近研究了依赖注入设计模式.
class User
{
private $db;
public function __construct(Database $db)
{
$this->$db = $db;
}
}
我不禁想知道这与我在聚合中学到的东西是一样的.如果我错了,请纠正我.我知道依赖注入和聚合的目标是不同的.有什么我想念的吗?
解决方法:
聚合是对象组合的一种形式.它与依赖注入无关.
另一方面,依赖注入不是关于对象如何关联,而是关于如何将其他对象(依赖关系)转换为特定对象.依赖关系可以是聚合,服务,存储库,验证器,文字……
通常,在强类型语言中,依赖关系作为接口引入,以避免将对象与实现细节耦合.相反,在动态类型语言中,约定和强大的文档可以构建一个良好且紧密耦合的依赖图.
请注意,数据库不能是聚合.并非所有关联都被视为聚合,而您可以考虑注入依赖关系.
无论如何,你的推理中有一些设计气味:用户不应该依赖于数据库,但是如果要实现像active record pattern这样的东西,数据层/数据映射层将是注入用户实体的更好的候选者.