Modelli per i costruttori di sottoclassi che variano leggermente il costruttore della classe genitore

2

Quindi, il mio problema è nel contesto di un approccio in stile MVC. Il codice qui è PHP, ma spero che questo sia un problema di design indipendente da esso.

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

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

Quindi voglio creare una serie di classi che ereditano da questa classe astratta, come BlogPageController o ErrorPageController. I costruttori di queste sottoclassi assomigliano a questo:

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

Il problema che vorrei affrontare è dover sempre definire il costruttore per le mie sottoclassi concrete - c'è un modo in cui posso fare in modo che la Constructor della classe genitrice esegua questo, ma a condizione che invece di creare (per esempio) un generico Oggetto dominio:

$this->domain = new Domain;

Creerà un dominio corrispondente:

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

Come nell'esempio sopra?

    
posta njp 22.11.2014 - 13:18
fonte

1 risposta

3

La classe astratta Controller non può creare le classi di <concrete class>Domain corrette, perché non sa a quale classe concreta appartiene ea quali classi Dominio e Vista deve essere associata.

Quello che puoi fare è passare nelle classi Dominio e Visualizza dal costruttore della classe derivata.

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);
  }
}
    
risposta data 22.11.2014 - 14:14
fonte

Leggi altre domande sui tag