Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.

Dependency Injection

836 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
  • Als Erste(r) kommentieren

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

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"

×