Ich versuche, die Verwendung eines IoC-Frameworks wie StructureMap zu verstehen, aber ich kann nicht umhin, zu denken, dass diese "Entwurfsmuster" nur Unsinn sind und Code nur noch komplexer machen.Was nutzt ein IoC-Framework in einer MVC-Anwendung?
Lassen Sie mich mit einem Beispiel beginnen, in dem ich denke, dass ein IoC etwas nützlich ist.
Ich denke, dass ein IoC nützlich sein kann, wenn es um die Instanziierung von Controller-Klassen in einem MVC-Framework geht. In diesem Fall denke ich über das .NET MVC-Framework nach.
Normalerweise wird die Instanziierung der Controller-Klasse vom Framework übernommen. Das bedeutet, dass Sie dem Konstruktor Ihrer Controller-Klasse keine Parameter übergeben können. Hier kann ein IoC-Framework nützlich sein. Irgendwo in einem IoC-Container geben Sie an, welche Klasse instanziiert und an Ihre Controller übergeben werden soll constructor
, wenn die Controller-Klasse aufgerufen wird.
Dies ist auch praktisch, wenn Sie den Controller Unit testen möchten, weil Sie das Objekt, das an es übergeben wird, verspotten können.
Aber wie ich schon sagte, ich kann verstehen, warum Leute es für ihre Controller-Klassen verwenden möchten. Aber nicht außerhalb davon. Von dort an können Sie einfach normal Dependency Injection tun.
Aber warum nicht einfach tun es wie folgt aus:
public class SomeController
{
public SomeController() : this(new SomeObj())
{
}
publiv SomeController(SomeObj obj)
{
this.obj = obj;
}
}
Jetzt müssen Sie keine 3rd party IoC-Framework verwenden, die auch eine geringere Einarbeitungszeit bedeutet. Da müssen Sie auch nicht in die Spezifikationen dieses Frameworks gehen.
Sie können das Objekt in Ihren Komponententests immer noch vortäuschen. Also auch kein Problem.
Das einzige, was Sie sagen können, ist, "aber jetzt ist Ihre Klasse eng gekoppelt zu SomeObj
". Das ist wahr. Aber wen interessiert das schon!? Es ist eine Controller-Klasse! Ich werde diese Klasse nie wieder verwenden. Also warum in aller Welt sollte ich mir Sorgen um diese enge Kopplung machen ..? Ich kann das Objekt verspotten, das an es weitergegeben wird. Das ist das einzig Wichtige.
Warum sollte ich einen IoC verwenden? Verpasse ich wirklich den Punkt ...? Für mich ist das IoC-Muster nur ein überbewertetes Muster. Hinzufügen weiterer komplexer Schichten zu Ihrer Anwendung ...
@HenkHolterman Nicht unbedingt, wenn jemand mit einem guten Argument kommt, warum mein Ansatz falsch ist und in welcher Art von Situation. Ich habe nicht vor mit jemandem zu streiten. Ich suche nur Rat in dieser Angelegenheit. – w00
mögliches Duplikat von [Warum brauche ich einen IoC-Container im Gegensatz zu einem einfachen DI-Code?] (Http://stackoverflow.com/questions/871405/why-do-i-need-an-ioc-container-aso-opposed) -zu-geradlinig-di-code) –