2017-07-27 2 views
2

Ich habe ein Elternteil Klasse Modell wie folgt aus:PHP Objekt Zusammensetzung Praxis

namespace vendor\appname\core; 

class Model 
{ 
    protected $db; 
    protected $session; 
    protected $cookie; 
    protected $record; 

    public function __construct() 
    { 
     $this->db = new Db; 
     $this->session = new Session; 
     $this->cookie = new Cookie; 
     $this->record = new Record; 
    } 
} 

hier ich mein Kind Modelle haben, wo ich das Basismodell erweitern und verwenden können dort Objekte

namespace vendor\appname\models; 

use vendor\appname\core; 

class Login extends Model 
{ 
     // here i can use simply like so 
     $this->db->prepare() // and so on 
     $this->session->set() // and so on so fourth 
} 

Also, wenn i habe 100 Klasse sollte ich das gleiche tun "Objekt Zusammensetzung" ist dies eine gute Praxis ??? Was ist mit dem Registrierungsmuster oder der Fabrik? Ist es möglich, es hier zu implementieren? oder Abhängigkeitsinjektion

+1

Sie sollten die Abhängigkeitsinjektion verwenden. –

+0

@JonStirling was ich über die Abhängigkeitsinjektion weiß, dass Sie den Klassennamen eingeben und dann das Objekt übergeben, aber in meinem Fall, wie kann ich das tun? Ich erweitere die Elternklasse !! –

+0

Ihr Beispiel zeigt keine Objektkomposition, es zeigt Vererbung an. Anstatt zu fragen, ob Sie eine bestimmte DP verwenden können, sollten Sie Ihre Frage klären und erklären, was Sie tun müssen. – Kwadz

Antwort

1

Basierend auf Ihrer Frage, ich denke, Sie sollten wahrscheinlich lesen und recherchieren mehr über die ersten fünf OO Design-Prinzip (SOLID) und General Responsibility Assignment Software Principle (GRASP) zu mehr über Design-Muster und Objekterstellung zu verstehen. Nachdem dies gesagt wurde, ist das, was Sie tun, mehr der Vererbung als der Komposition. Um es einfach zu machen,

Vererbung ist eher eine „ist-a“ Beziehung, zum Beispiel eines UserModel „ist-ein“ Modell, damit alle Eigenschaften und Methoden eines Modells wird Teil eines UserModel sein.

Aggregation ist eher wie "uses-a" -Beziehung. Ein Modell "verwendet" QueryBuilder und DatabaseClient.

Zusammensetzung auf der anderen Seite ist mehr wie "hat-a" oder "contain-a" Beziehung zum Beispiel, Buch "contain-a" Page.

Dies ist nur ein Beispiel in der Hoffnung, die Dinge für Sie ein wenig klar zu machen. Verständnis in diesen und auch Solid und Griff zu haben, würde Sie über verschiedene verfügbare Entwurfsmuster verstehen lassen.