DI == IoC ?

21
DI == IoC ? Eine Begriffsbestimmung Free Software Foundation Europe Autor Thomas Schubert https://wiki.fsfe.org/Fellows/FunThomas424242

description

Die ständige Gleichsetzung von Dependency Injection mit Inversion of Control mal kritisch betrachtet.

Transcript of DI == IoC ?

Page 1: DI == IoC ?

DI == IoC ?Eine Begriffsbestimmung

Free Software Foundation Europe

AutorThomas Schubert

https://wiki.fsfe.org/Fellows/FunThomas424242

Page 2: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License2/4 (http://www.gnu.org/copyleft/fdl.html)

Dependency InjectionDependency Injection

Inversion of ControlInversion of Control

Achso Du meinstAchso Du meinst

Page 3: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License3/4 (http://www.gnu.org/copyleft/fdl.html)

Dependency InjectionDependency Injection

Inversion of ControlInversion of Control

Achso Du meinstAchso Du meinstNeinNein

Page 4: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License4/4 (http://www.gnu.org/copyleft/fdl.html)

Dependency Injection Ein Objekt A ist abhängig von einem Objekt B

Page 5: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License5/4 (http://www.gnu.org/copyleft/fdl.html)

Dependency Injection Ein Objekt A ist abhängig von einem Objekt B

Objekt A erzeugt selbst keine Instanz von Objekt B sondern bekommt die Instanz von außen injiziert

Page 6: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License6/4 (http://www.gnu.org/copyleft/fdl.html)

Dependency Injection Ein Objekt A ist abhängig von einem Objekt B

Objekt A erzeugt selbst keine Instanz von Objekt B sondern bekommt die Instanz von außen injiziert

Injektion ist möglich über Reflection oder über Setter Methoden von A

Page 7: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License7/4 (http://www.gnu.org/copyleft/fdl.html)

Dependency Injection Ein Objekt A ist abhängig von einem Objekt B

Objekt A erzeugt selbst keine Instanz von Objekt B sondern bekommt die Instanz von außen injiziert

Injektion ist möglich über Reflection oder über Setter Methoden von A

Erzeugung und Injektion der Instanz B müssen nach der Erzeugung von A aber vor der Benutzung von B durch A stattfinden.

Page 8: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License8/4 (http://www.gnu.org/copyleft/fdl.html)

Typischer Steuerfluss

Objekt A

Objekt B

Übernimmt Steuerung

A ist von B abhängig

A hängt von B ab

A besitzt die Steuerung

Page 9: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License9/4 (http://www.gnu.org/copyleft/fdl.html)

Typischer Steuerfluss

Objekt A

Objekt B

Übernimmt Steuerung

A ist von B abhängig

A hängt von B ab

A besitzt die Steuerung

A ruft B aufA ruft B auf(Steuerfluss)

Page 10: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License10/4 (http://www.gnu.org/copyleft/fdl.html)

Typischer Steuerfluss

Objekt A

Objekt B

Übernimmt Steuerung

A ist von B abhängig

A hängt von B ab

A hat B aufgerufen

B übernimmt die Steuerung

A ruft B auf(Steuerfluss)

Page 11: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License11/4 (http://www.gnu.org/copyleft/fdl.html)

Typischer Steuerfluss

Objekt A

Objekt B

Übernimmt Steuerung

A ist von B abhängig

Nach Abarbeitung gibt B die Steuerung an A zurück

A ruft B auf(Steuerfluss)

Page 12: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License12/4 (http://www.gnu.org/copyleft/fdl.html)

Typischer Steuerfluss

Objekt A

Objekt B

A ist von B abhängig

Zusammenfassung

A hängt von B ab

Steuerfluss und Abhängikeitsgraph zeigen in die gleiche Richtung

A ruft B auf(Steuerfluss)

Page 13: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License13/4 (http://www.gnu.org/copyleft/fdl.html)

Inverser Steuerfluss

Objekt A

Objekt B

Übernimmt Steuerung

A ist von B abhängig

A hängt von B ab

B besitzt die Steuerung

Page 14: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License14/4 (http://www.gnu.org/copyleft/fdl.html)

Inverser Steuerfluss

Objekt A

Objekt B

Übernimmt Steuerung

A ist von B abhängig

A hängt von B ab

B besitzt die Steuerung

B ruft A aufB ruft A auf(Steuerfluss)

Page 15: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License15/4 (http://www.gnu.org/copyleft/fdl.html)

Inverser Steuerfluss

Objekt A

Objekt B

Übernimmt Steuerung

A ist von B abhängig

A übernimmt die Steuerung

B ruft A auf(Steuerfluss)

Page 16: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License16/4 (http://www.gnu.org/copyleft/fdl.html)

Inverser Steuerfluss

Objekt A

Objekt B

Übernimmt Steuerung

A ist von B abhängig

Nach der Abarbeitung gibt A die Steuerung an B zurück

B ruft A auf(Steuerfluss)

Page 17: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License17/4 (http://www.gnu.org/copyleft/fdl.html)

Inverser Steuerfluss

Objekt A

Objekt B

A ist von B abhängig

Zusammenfassung

A hängt von B ab

Steuerfluss und Abhängigkeitsgraph sind entgengesetzt

B ruft A auf(Steuerfluss)

Page 18: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License18/4 (http://www.gnu.org/copyleft/fdl.html)

Inverser Steuerfluss

Objekt A

Objekt B

A ist von B abhängig

Zusammenfassung

A hängt von B ab

Steuerfluss und Abhängigkeitsgraph sind entgengesetzt

B ruft A auf(Steuerfluss)

Beispiel: B is ein Eclipse Plugin Beispiel: B is ein Eclipse Plugin und A eine Plugin Extensionund A eine Plugin Extension

Page 19: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License19/4 (http://www.gnu.org/copyleft/fdl.html)

IoC == Inverser Steuerfluss IoC also Inversion of Control bedeutet übersetzt Umkehrung des Steuerflusses also Inverser Steuerfluss.

Trotzdem wird das was auf den vorangegangenen Folien zu sehen war nicht als IoC bezeichnet.

Als IoC bezeichnet man gewöhnlich Container basierte Systeme welche DI nutzen. Der Container übernimmt dabei die Initialisierung und Steuerung.

Page 20: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License20/4 (http://www.gnu.org/copyleft/fdl.html)

IoC == Inverser Steuerfluss Doch nur weil jetzt der Container die Steuerung übernimmt bedeutet dies nicht, dass sich der Steuerfluss umkehrt. Sonst wäre IoC bereits im J2EE Container zu finden gewesen.

Diese falsche Begriffszuordnung ist historisch gewachsener Schlampigkeit anzurechnen. Begonnen beim Pico Container und immer noch nicht beendet beim Spring Framework.

Page 21: DI == IoC ?

02.06.2012 Rechtlich geschützt durch die GNU Free Documentation License21/4 (http://www.gnu.org/copyleft/fdl.html)

Vielen Dank

für

Ihr Interesse

Photos/Grafiken: ©Thomas Schubert freigegeben zur allgemeinen VerwendungAusnahmen: keine

Schriftsatz: Courier NewErsatz Font: Arial erzeugt durch GoogleDrive, Open Office, Libre Office