0

如果我使用 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
}

而不是在每个单独的类(文章、页面和评论)中存在 setDatabase 和 setUser。

谢谢。

4

1 回答 1

0

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

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

trait DatabaseOwner
{
  private $database;

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

class Article
{
  use DatabaseOwner;
}

如果您发现自己经常一起使用相同的集合,您可以创建由多个特征组成的特征。

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

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

于 2012-07-26T02:51:47.413 回答