Dependency Injection
Unser Code soll schöner werden
Dieser Vortrag kann
Spuren von Java enthalten!
Wayne interessierts?
Schöner = Modularer
Designprinzip
Globale Variablen sind
schlecht. Singletons sind
globale Variablen.
Global Mutable State
Karl und die Kreditkarte
Karl
Kreditkarte: Testbarkeit
CreditCard cc;
cc = new CreditCard("12345678901234");
cc.charge(100);
Karl hat Angst um sein Geld.
Kreditkarte: Fehler 1
CreditCard cc;
cc = new CreditCard("12345678901234");
cc.charge(100);
java.lang.NullPointerException...
Kreditkarte: Fehler 2
CreditCardProcessor.init(...);
CreditCard cc;
cc = new CreditCard("12345678901234");
cc.charge(100);...
Kreditkarte: Fehler 3
OfflineQueue.start();
CreditCardProcessor.init(...);
CreditCard cc;
cc = new CreditCard("12345678901...
Kreditkarte: Die API lügt
Database.connect(...);
OfflineQueue.start();
CreditCardProcessor.init(...);
CreditCard cc;
cc = ...
Kreditkarte: Globaler Zustand
Database.connect(...);
OfflineQueue.start();
CreditCardProcessor.init(...);
CreditCard cc;
c...
Karl versucht
weniger Singletons
zu verwenden
Anderswo im Code
class OrderProcessor {
private CreditCardProcessor ccp;
public void OrderProcesser(CreditCardProcessor cc...
Aufbau des Graphen vs.
Geschäftslogik
Dependency Injection
class Main {
public static void main(String[] args){
Database db = new Database();
OfflineQueue oq = ...
Schrittweiser Aufbau des
Objektgraphen
4 Gruppiert nach den Lebenszeiten der Objekte
4 möglich durch:
4 Dependency Injecti...
Don't call us, we call you!
Inversion of Control
console.log("test") // kein IoC
var express = require('express');
var app = express();
app.get('/', f...
Beispiel IoC Allgemein
Dependency Injection ist
Inversion of Control beim
Aufbau des Objektgraphen
Zum Schluss der ganze Rest
4 Dependency Injection != Dependency Inversion
4 DI-Arten
4 Constructor Injection FTW
4 Setter ...
Quellen
4 Vorträge: Google Clean Code Talks (Youtube Playlist)
4 Artikel: Martin Fowler - "Inversion of Control
Containers...
Dependency Injection
Dependency Injection
Dependency Injection
Nächste SlideShare
Wird geladen in …5
×

Dependency Injection

615 Aufrufe

Veröffentlicht am

Unser Code soll schöner werden

Drogen, Alkohol, Mate - Abhängigkeiten gibt es überall. Auch in der Welt der Software. In diesem Vortrag geht es daher um Abhängigkeiten zwischen Klassen in OOP und ihr erfahrt warum ausgerechnet Hollywood all unsere Abhängigkeitsprobleme lösen kann. Am Ende des Vortrags könnt ihr dann nicht nur mit Software-Engineering-Buzzwords wie Dependency Injection und Inversion of Control um euch werfen, sondern wisst auch wie ihr euren Code auch modularer und weniger fehleranfällig gestaltet.

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
615
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
11
Aktionen
Geteilt
0
Downloads
1
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Dependency Injection

  1. 1. Dependency Injection Unser Code soll schöner werden
  2. 2. Dieser Vortrag kann Spuren von Java enthalten!
  3. 3. Wayne interessierts?
  4. 4. Schöner = Modularer
  5. 5. Designprinzip
  6. 6. Globale Variablen sind schlecht. Singletons sind globale Variablen.
  7. 7. Global Mutable State
  8. 8. Karl und die Kreditkarte
  9. 9. Karl
  10. 10. Kreditkarte: Testbarkeit CreditCard cc; cc = new CreditCard("12345678901234"); cc.charge(100); Karl hat Angst um sein Geld.
  11. 11. Kreditkarte: Fehler 1 CreditCard cc; cc = new CreditCard("12345678901234"); cc.charge(100); java.lang.NullPointerException at CreditCard.java:42 Karl fragt lieber mal einen Kollegen.
  12. 12. Kreditkarte: Fehler 2 CreditCardProcessor.init(...); CreditCard cc; cc = new CreditCard("12345678901234"); cc.charge(100); java.lang.NullPointerException at CreditCardProcessor.java:146 Karl fragt lieber noch mal einen Kollegen.
  13. 13. Kreditkarte: Fehler 3 OfflineQueue.start(); CreditCardProcessor.init(...); CreditCard cc; cc = new CreditCard("12345678901234"); cc.charge(100); java.lang.NullPointerException at OfflineQueue.java:22 Karl traut sich nicht noch mal zu fragen und liest den Code von OfflineQueue duch.
  14. 14. Kreditkarte: Die API lügt Database.connect(...); OfflineQueue.start(); CreditCardProcessor.init(...); CreditCard cc; cc = new CreditCard("12345678901234"); cc.charge(100);
  15. 15. Kreditkarte: Globaler Zustand Database.connect(...); OfflineQueue.start(); CreditCardProcessor.init(...); CreditCard cc; cc = new CreditCard("12345678901234"); System.out.println(cc.balance); // 100 UserManager.update(); System.out.println(cc.balance); // 120
  16. 16. Karl versucht weniger Singletons zu verwenden
  17. 17. Anderswo im Code class OrderProcessor { private CreditCardProcessor ccp; public void OrderProcesser(CreditCardProcessor ccp){ this.ccp = ccp; } public void process(Order order){ CreditCard cc = new CreditCard(order.creditCardNumber, this.ccp); cc.charge(order.sum()); ... } }
  18. 18. Aufbau des Graphen vs. Geschäftslogik
  19. 19. Dependency Injection class Main { public static void main(String[] args){ Database db = new Database(); OfflineQueue oq = new OfflineQueue(db); CreditCardProcessor cpp = new CreditCardProcessor(oq); CreditCard cc = new CreditCard("12345678901234", ccp); } }
  20. 20. Schrittweiser Aufbau des Objektgraphen 4 Gruppiert nach den Lebenszeiten der Objekte 4 möglich durch: 4 Dependency Injection Framworks 4 Assembler-Klassen selber bauen
  21. 21. Don't call us, we call you!
  22. 22. Inversion of Control console.log("test") // kein IoC var express = require('express'); var app = express(); app.get('/', function(req, res) { res.send('hello world'); // IoC });
  23. 23. Beispiel IoC Allgemein
  24. 24. Dependency Injection ist Inversion of Control beim Aufbau des Objektgraphen
  25. 25. Zum Schluss der ganze Rest 4 Dependency Injection != Dependency Inversion 4 DI-Arten 4 Constructor Injection FTW 4 Setter Injection (manchmal unvermeidbar) 4 Interface Injection (machen manche DI-Container, eher meiden) 4 Service Locator aka. Context
  26. 26. Quellen 4 Vorträge: Google Clean Code Talks (Youtube Playlist) 4 Artikel: Martin Fowler - "Inversion of Control Containers and the Dependency Injection pattern" 4 Buch: Robert C. Martin - "Clean Code"

×