Vorausgesetzt, das Modell ist eine "domänenspezifische Darstellung der Daten, auf denen die Anwendung arbeitet." [Wikipedia: MVC], Dienst, Formular, Plugin-Klassen, usw. werden nicht als Teil des Modells betrachtet, daher gehen sie in ihre eigenen Verzeichnisse unter /application
. Der Standard-Ressourcen-Auto-Loader stellt dies für uns ein, so dass MyApp_Form_Login
automatisch in /application/form/Login.php
gefunden wird.Wo ist der beste Ort, um anwendungsspezifische Nicht-Modell-Klassen in einer Zend Framework App zu speichern?
Für meine Anwendung muss ich einen benutzerdefinierten Authentifizierungsadapter schreiben. Die darin enthaltene Logik ist anwendungsspezifisch, daher handelt es sich nicht um wiederverwendbaren Bibliothekscode. Daher gehört sie nicht in /library/MyApp
. Es ist keine Serviceklasse, also gehört es nicht in /application/service
, noch ein Formular usw. Also, idiomatisch, wo sollte diese Klasse gespeichert werden?
Sicherlich ist es nicht in der Bibliothek gehören, weil sie nicht wiederverwendbar über verschiedene Anwendungen hinweg ist. Dies hängt von anwendungsspezifischen Konfigurationsoptionen ab, die in der Registrierung festgelegt und verfügbar sind (und daher davon abhängen, ob eine Registrierung verfügbar ist). Es scheint mir komisch, Zwei-Wege-Abhängigkeiten zwischen Anwendungscode und Bibliothekscode zu haben. –
Das ist der Grund, ich nenne es "Application Library";) Seine Bibliothek, spezifisch für Ihre Anwendung. Sie werden später andere Klassen sehen, für die Sie kein geeignetes Modul oder Unterverzeichnis finden. Jedoch: Injizieren Sie die Optionen nach Instanziierung (oder vielleicht später) in Ihre Objekte, anstatt umgekehrt. Ihre Klassen sind auf diese Weise nicht testbar. Die Registrierung als "Datencontainer" ist sowieso schlecht. – KingCrunch
Ja, Dependency-Injektion ist der Weg zu gehen, ich illustrierte nur ein Beispiel. Ich finde immer noch die Idee, eine Bibliothek für diese Art von Klasse seltsam zu erstellen. Was macht Plugins zum Beispiel so besonders, dass sie in '/ application' ein Verzeichnis bekommen, aber ein Auth-Adapter nicht? –