0

依存関係の注入にセッターを使用していて、多くのクラスがすべて同じ依存関係を必要とする場合、依存関係のセッターを含む基本クラスをそれらすべてのクラスに拡張させる必要がありますか?

たとえば、次のようになります。

Page、Article、Comment の 3 つのクラスがあり、これらはすべて $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 が存在するのではなく。

ありがとう。

4

1 に答える 1

0

Dependencies という名前のクラスを持つことは悪いニュースです。記事は依存関係のサブタイプではありません。

これは、特性がより適切な場合があります。

trait DatabaseOwner
{
  private $database;

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

class Article
{
  use DatabaseOwner;
}

同じセットを一緒に使用することが多い場合は、複数の特性で構成される特性を作成できます。

ただし、これらの 3 つのクラスがすべて is-a 関係を表すより適切な名前のクラスから派生し、それらの関数を実装する (または特性を使用する) 場合、それは基本型に固有であるため、完全に受け入れられます。

しかし、たまたまいくつかのプロパティを共有するという理由だけでモノリシックな基本クラスを作成するのは、私の意見では良くありません。

于 2012-07-26T02:51:47.413 に答える