## Dependency Injection ###### (Inversion of Control)
## Auto daten sammeln ![](assets/example.png)
## Service Interface
### Diagram ![](assets/diagram.png)
## Insert Window ``` private CarService carService; . . . Car car = carService.create(carMap); ``` ### Reicht das?
## Factory ``` Factory factory = Factory.getInstance(); carService = factory.getCarService("Metric"); ``` ### Problem ? Das insert window wird ständig geändert
## Constructor Injection ``` public InsertWindow(CarService carService) { this.carService = carService; } ``` * Einfach zu testen * Festlegung wird erzwungen
## Setter Injection ``` class InsertWindow { setCarService(CarService carService) { this.carService = carService; } } ``` * Kann da sein. Muss nicht. * Einfach zu testen
## Injection with Annotations ``` class InsertWindow { @Inject private CarService carService; } ``` * Änderungen am file bleiben klein * immer da * Framework wird benötigt * Test Framework benötigt
## Testing * testing von insert window einfacher * testing ohne echte impl möglich
## Mocking * Vorgauckeln einer Impelmentation * sehr einfache Impelmentation zum testen
``` carService = new CarService() { @Override public Car create(Map data) throws InvalidInputException {return null;} @Override public Map translate(Car car) {return null;} @Override public String getUnitOfMesurement(CarAttribute carAttribute) { return "testUnit"; } }; ```
## Frameworks * Spring Boot * Google Guice * AngularJS
## Vorteile * Macht Auteilung von Aufgaben leichter * Verhalten fix, Verarbeitung nicht * Parameterisierbar ohne Compilieren * Seperation of Conserns * Lose Kopplung
## Nachteile * Code lesen manchmal schwierig * Abhängigkeiten machmal kompliziert verlinkt * Macht abhängig vom jeweilige Framework