Hallo,
ich habe vor mehr oder minder kurzer Zeit mit Java angefangen und habe schon das eine oder andere kleinere Programm entwickelt. Dabei bin ich aber noch weit von professionellen Techniken wie z.B. TDD entfernt.
Zumindest (JUnit-)Tests möchte ich endlich für meine Anwendungen haben. Dabei bin ich über typische Probleme gestolpert, welche offenbar mithilfe von Dependency Injection umgangen werden können. Ich habe mir bereits die Dokumentation von z.B. Guice (welches ich vor allem wegen GIN benutzen möchte, um letztlich auch GWT-Anwendungen zu testen) angeschaut. Die Beispiele die ich gesehen habe, erscheinen mir logisch und ich denke, dass ich sie begriffen habe.
Jedoch sind die bisherigen Beispiele immer nur in der Form »Klasse B verwendet Klasse C. Anstelle Klasse C selbst zu instanziieren, bekommt Klasse B eine Referenz über z.B. den Konstruktor.«.
Auf Guice bezogen holt sich Klasse A (main(), Entry Point) einen Injector, erzeugt damit Klasse B und C und übergibt B die Referenz auf C.
Aber wie skaliert dieses Vorgehen auf beliebig viele Klassen? Was ist wenn ein Objekt der Klasse C ein Objekt der Klasse D benötigt. Dann würde doch Klasse C die Abhängigkeit von Klasse B erwarten, welche letztlich auf Klasse A bei der Erzeugung von C zurückführt.
Das heißt doch dann letztlich, dass der gesamte Abhängigkeitsbaum nahezu direkt nach Programmstart vorhanden sein muss, auch wenn B z.B. C dieses mal nicht benutzt?! Den Injektor rumschleppen, damit B (wenn es wirklich notwendig ist) C erzeugen kann, ist ja auch nicht der Sinn der Sache.
Irgendwie verstehe ich DI "im Großen" noch nicht so wirklich. Könnte mir da jemand auf die Sprünge helfen?
ich habe vor mehr oder minder kurzer Zeit mit Java angefangen und habe schon das eine oder andere kleinere Programm entwickelt. Dabei bin ich aber noch weit von professionellen Techniken wie z.B. TDD entfernt.
Zumindest (JUnit-)Tests möchte ich endlich für meine Anwendungen haben. Dabei bin ich über typische Probleme gestolpert, welche offenbar mithilfe von Dependency Injection umgangen werden können. Ich habe mir bereits die Dokumentation von z.B. Guice (welches ich vor allem wegen GIN benutzen möchte, um letztlich auch GWT-Anwendungen zu testen) angeschaut. Die Beispiele die ich gesehen habe, erscheinen mir logisch und ich denke, dass ich sie begriffen habe.
Jedoch sind die bisherigen Beispiele immer nur in der Form »Klasse B verwendet Klasse C. Anstelle Klasse C selbst zu instanziieren, bekommt Klasse B eine Referenz über z.B. den Konstruktor.«.
Auf Guice bezogen holt sich Klasse A (main(), Entry Point) einen Injector, erzeugt damit Klasse B und C und übergibt B die Referenz auf C.
Aber wie skaliert dieses Vorgehen auf beliebig viele Klassen? Was ist wenn ein Objekt der Klasse C ein Objekt der Klasse D benötigt. Dann würde doch Klasse C die Abhängigkeit von Klasse B erwarten, welche letztlich auf Klasse A bei der Erzeugung von C zurückführt.
Das heißt doch dann letztlich, dass der gesamte Abhängigkeitsbaum nahezu direkt nach Programmstart vorhanden sein muss, auch wenn B z.B. C dieses mal nicht benutzt?! Den Injektor rumschleppen, damit B (wenn es wirklich notwendig ist) C erzeugen kann, ist ja auch nicht der Sinn der Sache.
Irgendwie verstehe ich DI "im Großen" noch nicht so wirklich. Könnte mir da jemand auf die Sprünge helfen?