Ausgehend von einem C++ Hintergrund muss ich die Komplexität der Java Welt und ihre Frameworks beherrschen. Mit Blick auf den Frühling Rahmen für DI bin ich finden es schwer zu glauben, dass ich jede Setter-Funktion machen müssen, die Gegenstand für DI Öffentlichkeit sein wird. Stört diese Anforderung nicht das Prinzip der Informationsverbergung?Wird die Abhängigkeitsinjektion von Spring Information nicht ausgeblendet?
Natürlich möchte ich Frühling in der Lage, einige private Teile meiner Klassen zu setzen, aber ich will sicherlich nicht jede Client-Klasse das gleiche tun können.
Was fehlt mir hier?
Diese Antwort impliziert, dass "coding to interfaces" bedeutet, dass jede Klasse eine separate Schnittstelle implementieren muss. Dies ist nicht, was das Prinzip, wie im GoF-Buch beschrieben, bedeutet. In Wirklichkeit gilt es nur für Fälle, in denen Sie zwei separate Objekttypen benötigen oder bereits haben, einen für die Abstraktion (Schnittstelle) und einen anderen für eine Implementierung dieser Abstraktion. –
Ich denke, Sie werden wahrscheinlich feststellen, dass die Klassen, die in einer gemeinsamen Spring-Anwendung in einander injiziert werden müssen, ** Service ** -Klassen sind, wie 'Dao's usw. Ich habe festgestellt, dass eine große Anzahl von diesen könnte möglicherweise alternative Implementierungen –
Ja, wenn Sie mehrere Implementierungen haben, gilt das "Code für die Schnittstelle, nicht die Implementierung" -Prinzip. Aber Dinge wie "Wenn Sie an Schnittstellen codieren ..." ohne einen klaren Kontext zu sagen, ist irreführend und kann leicht von weniger erfahrenen Entwicklern falsch interpretiert werden.Die übermäßige Verwendung separater Schnittstellen verursacht großen Schaden, IMO. –