依赖注入setter在基类中,并且具有需要依赖项作为扩展的类

时间:2012-07-26 01:21:03

标签: php dependency-injection

如果我使用setter进行依赖注入,并且许多类都需要相同的依赖项,那么我是否应该让所有这些类扩展一个带有依赖项setter的基类?

例如:

假设我有三个类:Page,Article,Comment,所有这些都依赖于$ db和$ user。

拥有基类依赖关系有什么好处或缺点,如下所示:

    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。

感谢。

1 个答案:

答案 0 :(得分:0)

拥有一个名为Dependencies的类是个坏消息。文章不是依赖项的子类型。

这是特质可能更合适的地方。

trait DatabaseOwner
{
  private $database;

  final public function setDatabase($dbh)
  {
    $this->database = $dbh;
  }
}

class Article
{
  use DatabaseOwner;
}

如果您发现自己经常使用同一组,则可以创建包含多个特征的特征。

然而,所有这些说:如果这三个类都来自一个更好的命名类,它代表一个is-a关系并且它实现了那些函数(或使用特征),因为它是基类型的固有特性,那么完全可以接受。

但是,仅仅因为碰巧分享某些属性而创建一个单一的基类在我看来并不好。