Abhängigkeitsmanagement in Zend Framework 2 MVC-Anwendungen

Da wird das ServiceLocatorAwareInterface wohl seinaus dem AbstractController in ZF3 entfernt, Abhängigkeiten sollten stattdessen über den Konstruktor oder über Setter-Methoden übergeben werden.

Berücksichtigen Sie in diesem Zusammenhang den Anwendungsfall eines Benutzers oder Site-Controllers mit Aktionen wie Registrieren, Konto aktivieren, Anmelden, Abmelden usw. Dies würde mindestens einen UserService und zwei Formulare erfordern. Fügen Sie ein paar weitere verwandte Aktionen hinzu (Remote-Authentifizierung, Verknüpfung von Konten usw.), und Sie erhalten 4 oder 5 Formulare.

Das Übergeben all dieser Abhängigkeiten über den Konstruktor ist bestenfalls problematisch, und was noch wichtiger ist, es ist normalerweise nur 1 Formular pro Aktion erforderlich.

Welche der folgenden Techniken ist Ihrer Meinung nach besser und warum?

Erstellen Sie separate Controller für jede Aktion, sodass jeder Controller (zusätzlich zu einem Dienst) nur ein einziges Formular benötigt. Zum Beispiel RegistrationController, LoginController, LinkAccountController usw.

Auf diese Weise erhalten Sie viele Controller.

Geben Sie im Werk für den Controller verschiedene Formulare an, je nachdem, welche Aktion angefordert wird.

Der Aufbau des Controllers ist abhängig von dieser Factory und insbesondere von der Anforderungsumgebung (Routing usw.). Sie können den Controller direkt (zu Testzwecken oder zu anderen Zwecken) konstruieren, müssen dann jedoch sicherstellen, dass die Abhängigkeiten verfügbar sind, und Ausnahmen auslösen wenn nicht.

Verwenden Sie den Ereignismanager, lösen Sie ein Ereignis im Controller aus, wenn ein Formular erforderlich ist, und lassen Sie einen Ereignishandler die Abhängigkeit bei Bedarf bereitstellen.

Diese Technik wird beschriebenHier.Ihr Controller wäre dann von einem EventManager abhängig und nicht von einem ServiceLocator, was wahrscheinlich nicht viel besser ist.

Übergeben Sie den FormElementManager an den Controller, und fordern Sie Formulare an.

Nicht besser als der SL selbst am ehesten.

Erstellen Sie Formulare direkt in Controllern.

Wie wirkt sich das auf die Testbarkeit aus?Dieselbe Frage würde sich dann auf die Behandlung eines Controllers mit mehreren Diensten (anstelle von Formularen) beziehen.

Andere?

Siehe auch:

Übergabe von Formularen gegen Rohdaten an die ServiceebeneWerksklassen gegen Abschlüsse in Zend Framework 2

Antworten auf die Frage(2)

Ihre Antwort auf die Frage