2012-04-01 8 views
1

Kürzlich bin ich zu Symfony 2 umgezogen und habe eine kleine Frage.Symfony 2 Architektur im Fall einer Modellklasse (Services, Dependencie Injektion)

Lassen Sie uns sagen, ich habe folgendes Modell:

„Katalog“, die „Kataloge“ enthält. Das Modell bezieht seine Daten aus Dateien, benötigt aber auch eine Datenbankverbindung, um die Daten zu überprüfen.

Im Zend-Framework oder anderen früheren Projekten habe ich die Abhängigkeiten von einem statischen Objekt geladen, das eine Art "Registry" bildet.

Wie ich verstehe, Symfony 2 verwendet stattdessen ihre Service-Muster (Abhängigkeit Injektion). Aber wie sieht das für meinen Fall aus?

Muss ich einen Service für jede Modellklasse erstellen, die ich verwende, um alle Abhängigkeiten automatisch zu injizieren? Oder ist es perfekt gültig, wenn ich selbst eine Instanz von meinem Objekt erstelle und beispielsweise die Datenbankverbindung in meinem Konstruktor einstelle? Um einen Dienst für jede Klasse, die Abhängigkeiten benötigt, zu erstellen, scheint mir ein wenig zu übertreiben.

Antwort

0

Sie können sicherlich Klassen erstellen und Abhängigkeiten auf altmodische Art und Weise injizieren, aber nehmen Sie sich die Zeit, um Details zum Erstellen von Diensten zu erfahren. Ich denke, Sie werden finden:

  1. Hinzufügen eines neuen Dienstes ist trivial. Kopieren Sie einige Zeilen der Konfiguration, passen Sie die Klasse, ID und vielleicht einige Parameter an und Sie sind fertig. Benötigt viel weniger Zeit als die eigentliche Klasse zu erstellen.

  2. Sehr bald werden Sie von der Injektion einer Datenbankverbindung zum Injizieren anderer Dienste und vielleicht einigen Parametern profitieren. Willst du wirklich daran denken, all das Zeug jedes Mal zu tun, wenn du ein neues Objekt brauchst?

  3. Mithilfe von Service-IDs können Sie Ihre Controller vom genauen Standort/Namen einer Klasse trennen. Wenn Sie zum ersten Mal ein Refactoring durchführen und einige Dienste in ein eigenes Paket verschieben oder einen Dienst mit einem anderen austauschen müssen, werden Sie froh sein, dass Sie nicht Ihren ganzen Code aufspüren und Änderungen vornehmen müssen.

S2 ist nicht wirklich auf "Modelle" konzentriert. Denken Sie stattdessen an einen Service mit dem Namen CatalogManager, der den Zugriff auf verschiedene Katalogfunktionen einschränkt.

+0

Ja, ich habe bereits einen Service aus meinem Katalog erstellt. Ich war nur neugierig, ob dies der richtige Weg ist. – Johni