Abhängigkeitsinjektion in MVC

8

Ich versuche, ein einfaches MVC-Skelett zu erstellen, und ich stehe mit Abhängigkeiten fest.

Das habe ich jetzt:

%Vor%

Die Frage ist: Wie kann ein Objekt auf irgendeine Abhängigkeit zugreifen?

Einige Beispiele:

  • Der Controller benötigt möglicherweise Config, um Ausgabeformatierungsoptionen zu erhalten.
  • Der Mapper benötigt möglicherweise eine Datenbank, um Abfragen durchzuführen.
  • Jeder Controller / Helfer benötigt Zugriff auf Log.
  • Helper benötigt möglicherweise eine Reihe von Abhängigkeiten (zB: Uri_Helper benötigt Router).

Die einzige Möglichkeit, die mir einfällt, ist die Registry zu benutzen, aber das verstößt gegen das Gesetz von Demeter (fragen Sie, was Sie wirklich brauchen).

    
Hemaulo 20.01.2011, 10:34
quelle

2 Antworten

5

Sie schreiben facilities (excellen Artikel). Das könnte total langweilig sein (wie im Artikel erwähnt), also könnte man ein DI-Framework wie zum Beispiel verwenden:

  • Symfony DIC: Siehe Jurajs Beitrag.
  • PD
  • Yadif
  • Drip (PHP4): wurde aber seit einiger Zeit nicht mehr aktualisiert.

Ich möchte auch darauf hinweisen, dass Miskos Blog sehr interessant ist und viele gute Reads zum richtigen Testen enthält. Besonders das Handbuch zum Schreiben testbaren Codes muss gelesen werden.

PS: Ich denke, Sie sollten Fabriken schreiben, weil PHP eine Skriptsprache ist und Sie sollten so wenig Code wie möglich verwenden, um Ihre Website schnell zu machen. Das ist das Problem mit einigen PHP-Frameworks .

Rasmus Ledorf (PHP Erfinder) Zitat:

  

Viele Frameworks können sehr gut aussehen   auf den ersten Blick ansprechend, weil sie   scheinen Web-Anwendungen zu reduzieren   Entwicklung zu ein paar trivialen   Schritte, die zu einer Code-Generierung führen   und oft automatische Schemaerkennung,   aber die gleichen Verknüpfungen sind wahrscheinlich   seien Sie auch Ihre Engpässe   erreiche diese Einfachheit durch Opfern   Flexibilität und Leistung. Nichts   wird deine Bewerbung für erstellen   Sie, egal was es verspricht. Sie   werden es bauen müssen   dich selber. Anstatt mit zu beginnen   die Fehler in einigen fremden beheben   Rahmen und Refactoring alle   Dinge, die nicht auf dich zutreffen   Umwelt verbringen Sie Ihre Zeit mit dem Aufbau eines   schlankes und wiederverwendbares Muster, das passt   Ihre Anforderungen direkt. Schlussendlich   Ich denke, du wirst das finden   homegrown kleiner Rahmen hat sich gerettet   Sie Zeit und Ärger und Sie enden   mit einem besseren Produkt.

    
Alfred 20.01.2011, 11:41
quelle
1

Sie können einen Abhängigkeitsinjektionscontainer wie Symfony DIC verwenden. Sie definieren Ihre Objekte, Konfiguration und Verdrahtung innerhalb des Containers, der dann für die Instanziierung zuständig ist.

    
Juraj Blahunka 20.01.2011 10:46
quelle