Builder pattern vs. Dependency Injection (z.B. via Guice)
Entwickle ich eine einfache Baum-strukturierte Datenbank und ich bin in der Regel Einstellung Abhängigkeiten oder optionale Einstellungen über einen Builder (Builder-pattern). Ich bin mir jetzt nicht sicher, Wann zum Beispiel Guice, wenn die Verwendung der Builder-Muster, und wenn die Verwendung einer statischen factory-Methode statt Konstruktor selbst. Ich habe gelesen, Effektive Java mehrere Male, und ich denke, es wird mindestens eine Menge von Vorteilen, die für nicht setzen Sie den Konstruktor. Es ist Zeit zum Lesen 😉
So, wissen Sie von Fällen, die deutlich unterscheidbar sind? Und sollte ich nicht aussetzen Konstruktor? So zum Beispiel in jedem Fall schreiben public static Foo getInstance(...) { return new Foo(...)}
?
- Ich schlage vor, das tun, was Sie glauben, ist die einfachste und natürlichste Art und Weise den Aufbau Ihrer Komponenten.
- Immer bemühen Sie sich um reguläre Java-Objekte mit Konstruktoren oder setter. Dann, bei einigen besonderen Anlässen, betrachten
DI
Implementierungen zu entkoppeln, oderfactories
/builders
um Ihnen zu helfen, Konstruktive Logik, wenn benötigt.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich bin ein fester Gläubiger, dass Sie nicht brauchen, um dependency injection für alles.
Für eine
LookupService
wäre es natürlich injizieren eineDictionary
so dass seine Implementierung kann ausgetauscht werden durch die Konfiguration.Für eine
Firewall
auf der anderen Seite. Es wäre natürlich für Sie zu schaffen, Ihre eigenenFireWallRules
, vielleicht durch einen mitgeliefertenFactory
oder eineBuilder
.Als Richtlinie, injizieren, was Sie brauchen, um konfigurieren, nicht automatisch zu injizieren alles andere.
Betrachten
static factory (*)
wennLists.newArrayList()
Betrachten
instance factories
wennAbstractFactory
design patternBetrachten
builder
wenn(*)
Statische Methoden sind nicht immer getestet werden, und das Vorhandensein von sollte man meiner Meinung nach immer motiviert sein.Ein typischer Anwendungsfall für eine Fabrik ist zu verringern Kupplung. Durch die Verwendung eines
static factory
diese Fähigkeit vollständig verloren.Factory
ist in Erster Linie, die benötigt wird, um zusätzliche Instanzen durch die Programme Lebenszyklus. EinFactory
können noch injiziert werden, durch einen Rahmen, durch.FireWallRules
, es gibt tatsächlich einen Vorteil auf DI, da kann man eine andere Implementierung verwenden, um automatisch speichern Sie Sie in eine Datei und laden Sie Sie automatisch, zum Beispiel. Für Dinge wie, dass, ich in der Regel verwenden Sie eine Instanz der Fabrik.Wie sind diese 2 sogar in der Nähe vergleichbaren in deinem Geist?
Die builder pattern wird verwendet, wenn Sie benötigen, um mit Klassen, deren Konstruktoren hätte eine überwältigende Anzahl von Parametern (möglicherweise optional) und dieses Muster lässt sich der code leichter zu Lesen und zu schreiben.
Dependency Injection ist ein Ansatz, der erleichtert lose Kopplung die Beseitigung der Abhängigkeiten von höheren Kursen zu niedrigeren level-Klassen. E. g. eine Klasse muss eine Verbindung zu einer Datenbank nicht direkt eine Verbindung erstellen, aber eine Verbindung ist "injiziert" und diese Verbindung vertauscht werden könnte, um eine andere Datenbank, ohne den code verwenden.
Habe ich begonnen, mit generator für die meisten meiner Projekte, und es stellt sich heraus, ich kann und ersetzt alle meine DI mit Bauherren und singleton.
ie:
Mein code viel einfacher geworden zu verwalten, ohne DI.