如果我使用setter进行依赖项注入,并且许多类都需要相同的依赖项,那么我是否应该让所有这些类都扩展一个基类,其中包含用于依赖项的setter?
例如:
假设我有三个类:Page、Article、Comment,它们都依赖于$db和$user。
有一个基类Dependencies的优点或缺点是什么,比如:
class Dependencies
{
private $database;
private $user;
final public function setDatabase($dbh)
{
$this->database = $dbh;
}
final public function setUser($user)
{
$this->user = $user;
}
}
然后将其他类作为依赖的扩展
class Article extends Dependencies
{
public function __construct()
{
// some code
}
// some other functions that use $this->database and $this->user
}
而不是在每个单独的类(Article、Page和Comment)中都存在setDatabase和setUser。
谢谢。
这是特征可能更合适的地方。
trait DatabaseOwner
{
private $database;
final public function setDatabase($dbh)
{
$this->database = $dbh;
}
}
class Article
{
use DatabaseOwner;
}
如果你发现自己经常使用同一组特征,你可以创建由多个特征组成的特征。
然而,话虽如此:如果这三个类都来自某个名称更好的类,该类表示is-a关系,并且它实现了这些函数(或使用了特性),因为它是基类型的固有函数,那么这是完全可以接受的。
但在我看来,仅仅因为事物碰巧共享某些属性而创建一个单一的基类是不好的。