Ich habe diese Woche versucht, das Typhoon-Framework für die Abhängigkeitsinjektion zu verwenden. Ich verstehe, dass das Trennen der Konstruktion von Objekten vorteilhaft ist, um beliebige Komponenten während des Unit-Tests durch Mocks zu ersetzen, und bisher habe ich allein davon Vorteile gesehen.
Aber ich kann nicht anders, als zu glauben, dass ich vor einer riesigen View-Controller-Klasse mit zehn Header-Importen jetzt eine riesige Factory-Klasse mit zehn Header-Importen hatte. Soll ich vermeiden, eine massive Fabrikklasse zu haben?
dependency-injection
Sieger
quelle
quelle
Antworten:
Abhängigkeitsinjektion hilft einfach zu definieren, wie ein Objekt über ein anderes abhängiges Objekt Bescheid weiß. Es wird Ihnen nicht helfen, die Gesamtkomplexität des Systems zu reduzieren. Wenn Sie vor DI zehn Importe benötigt haben, benötigen Sie danach noch zehn Importe. Der Unterschied besteht darin, dass sich diese Importe an einem Ort (einer Klasse) befinden, der sinnvoller ist (Fabrik, Hersteller usw.).
Indem Sie zulassen, dass Abhängigkeiten über einen Konstruktor oder eine Methode bereitgestellt werden, können Sie Ihrer Klasse flexibel ein anderes, aber immer noch gültiges abhängiges Objekt bereitstellen und den Zusammenhalt dieser Klasse erhöhen, indem Sie Bedenken beseitigen.
Es gibt mehrere Prinzipien, die ähnlich sind und häufig zusammen verwendet werden: Dependency Injection (DI), Inversion of Control (IoC) und das Dependency Inversion Principle (DIP)
Aus diesem Artikel http://martinfowler.com/articles/dipInTheWild.html
quelle
Die Abhängigkeitsinjektion verringert nicht die Komplexität, erhöht jedoch die Verwaltbarkeit durch Trennung von Bedenken und verringerte Kopplung.
Du solltest "humorvolle" Klassen vermeiden, Punkt. Nehmen wir also an, Sie teilen den View Controller in kleinere, besser wartbare Klassen auf. Jetzt sind alle dafür verantwortlich, ihre Abhängigkeiten in den Griff zu bekommen. DI hilft Ihnen dabei, dieses Abhängigkeitsmanagement von all diesen Klassen in eine Factory- / Konfigurationsklasse zu verschieben, die nur für das Abhängigkeitsmanagement verantwortlich ist - siehe Prinzip der Einzelverantwortung. Und obwohl es sicherlich viel weniger "humorvoll" ist als der ursprüngliche Ansichts-Controller, haben Sie immer die Möglichkeit, es in kleinere Abhängigkeitsverwaltungsklassen aufzuteilen, die für verschiedene Teile der Anwendung verantwortlich sind, wenn es zu groß wird.
quelle
In Laienwörtern:
Die Abhängigkeitsinjektion bringt die Komplexität dahin, wo sie weniger Schaden anrichtet.
BEARBEITEN für @gnat: DI verschiebt die Komplexität nicht nur in eine separate Klasse, sondern dorthin, wo sie weniger Schaden verursacht.
quelle