Frage

Ich bin ein bisschen ein DI Neuling, so verzeihen Sie mir, wenn dies der falsche Ansatz oder eine dumme Frage.

Lassen Sie uns sagen, dass ich eine Form haben, die erstellt / aktualisiert einen Auftrag, und ich weiß, es gehen zu müssen, um eine Liste von Produkten und Kunden abrufen anzuzeigen. Ich möchte in der Order-Objekt passieren, dass es die Bearbeitung, aber ich möchte auch die Produkteservice und CustomersService als Abhängigkeiten injizieren.

So will ich meine IoC-Container werden soll (je nachdem, welche ich mit gehen), um die Dienste liefern, aber es wird bis zu dem anrufenden Code sein, das Order-Objekt zu liefern, zu bearbeiten.

Soll ich den Konstruktor als unter den Order-Objekt als ersten Parameter deklarieren und die Produkteservice und CustomersService danach, zum Beispiel:

public OrderForm(Order order, ProductsService prodsSvc, CustomersService custsSvc)

... oder sollten die Abhängigkeiten stehen an erster Stelle und die Order-Objekt zuletzt, zum Beispiel:

public OrderForm(ProductsService prodsSvc, CustomersService custsSvc, Order order)

Ist das wichtig? Hängt es auf dem IoC-Container verwendet werden? Oder gibt es eine „bessere“ Art und Weise?

War es hilfreich?

Lösung

Ich bin nicht einverstanden mit der Antwort @ aku.

Ich denke, was Sie tun, ist in Ordnung, und es gibt auch andere Möglichkeiten, es zu tun, die nicht mehr oder weniger richtig. Zum Beispiel kann man sich fragen, ob dieses Objekt sollte in erster Linie auf Dienstleistungen wird je.

Unabhängig von DI, ich fühle es hilfreich ist in Ihrem Kopf zumindest die Art von Staat zu klären, jedes Objekt, wie zum Beispiel des tatsächlichen Zustand (Order), abgeleiteten Zustand (falls vorhanden) hält, und Abhängigkeiten (Dienstleistungen):

http://tech.puredanger.com/2007/09/18/ spelunking /

An jedem Konstruktor oder eine Methode, ziehe ich die realen Daten zuerst und Abhängigkeiten oder externe Sachen weitergegeben werden zum letzten weitergegeben werden. Also in Ihrem Beispiel würde ich die erste bevorzugen.

Andere Tipps

Matt, sollten Sie nicht normale Parameter mit Abhängigkeiten mischen. Da Ihr Objekt in den Interna von IoC-Containern erstellt werden, wie werden Sie die notwendigen Argumente angeben?

Mischabhängigkeit und normale Argumente werden Logik Ihres Programms komplizierter machen.

In diesem Fall wäre es besser, Abhängigkeitseigenschaften zu erklären (dh Abhängigkeiten von Konstruktor entfernen) oder initialisieren , um nach IoC konstruiert Orderform und gelöst es Abhängigkeiten (dh entfernen normale Parameter aus Konstruktor).

Sie können auch alle Ihre Parameter erklären, einschließlich , um als Abhängigkeiten.

Ich fühle mich ein bisschen beunruhigt über eine Instanz von Orderform ermöglicht wird, ohne die erforderliche Bezug auf einen Auftrag Instanz instanziiert werden. Ein Grund dafür könnte sein, dass dies mich zu tun, im Voraus Überprüfung auf null Aufträge verhindern würde. Weitergehende Gedanken?

Ich glaube, ich etwas Trost nehmen könnte, dass die Orderform-Objekte zu wissen, nur durch eine Factory-Methode instanziert werden, dass die Order-Eigenschaft stellt sicher, nachdem Sie den Anruf an den IoC Rahmen festgelegt ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top