web-dev-qa-db-ja.com

親クラスコンストラクターをわずかに変更するサブクラスコンストラクターのパターン

したがって、私の問題はMVCスタイルのアプローチのコンテキストにあります。ここでのコードはPHPですが、これが独立した設計の問題であることを期待しています。

abstract class Controller
{
  private $domain;
  private $view;

  function __construct() {
    $this->domain = new Domain;
    $this->view = new View;
  }
}

したがって、この抽象クラスから継承する一連のクラス(BlogPageController、ErrorPageControllerなど)を作成します。これらのサブクラスのコンストラクターは次のようになります。

class BlogPageController
{
  function __construct() {
    $this->domain = new BlogPageDomain;
    $this->view = new BlogPageView;
  }
}

私が対処したい問題は、具象サブクラスのコンストラクターを常に定義する必要があることです-親クラスのコンストラクターにこれを実行させる方法はありますが、(たとえば)汎用ドメインオブジェクトを作成する代わりに、次の条件があります。

$this->domain = new Domain;

一致するドメインが作成されます。

$this->domain = new <concrete class>Domain;

上記の例のように?

2
njp

抽象Controllerクラスは、適切な<concrete class>Domainクラスを作成できません。これは、それが属する具体的なクラス、および関連付けられるドメインクラスとビュークラスがわからないためです。

できることは、派生クラスのコンストラクターからDomainクラスとViewクラスを渡すことです。

abstract class Controller
{
  private $domain;
  private $view;

  function __construct($aDomain, $aView) {
    $this->domain = $aDomain;
    $this->view = $aView;
  }
}

class BlogPageController extends Controller
{
  function __construct() {
    parent::__construct(new BlogPageDomain, new BlogPageView);
  }
}