This commit is contained in:
@@ -106,10 +106,8 @@ Ausgangslage ist eine Softwarearchitektur im Direct-Dependency-Graph-Modell.
|
||||
architecture-beta
|
||||
service a(mdi:package-variant-closed)[Klasse A]
|
||||
service b(mdi:package-variant-closed)[Klasse B]
|
||||
service c(mdi:package-variant-closed)[Klasse C]
|
||||
|
||||
a:R --> L:b
|
||||
b:R --> L:c
|
||||
```
|
||||
Bei diesem Beispiel ist die Klasse A ein high-level Modul, welches direkt auf die Klasse B referenziert, was das DI-Prinzip verbietet.
|
||||
Das Problem dabei: Die einzelnen Klassen sind eng gekoppelt, was das Austauschen von B mit einer anderen Klasse unmöglich macht. Genau dieses Problem wird vom DIP gelöst.
|
||||
@@ -119,13 +117,9 @@ architecture-beta
|
||||
service a(mdi:package-variant-closed)[Klasse A]
|
||||
service b(mdi:package-variant-closed)[Klasse B]
|
||||
service ib(mdi:car-clutch)[Interface B]
|
||||
service c(mdi:package-variant-closed)[Klasse C]
|
||||
service ic(mdi:car-clutch)[Interface C]
|
||||
|
||||
a:B --> T:ib
|
||||
ib:R <-- L:b
|
||||
b:B --> T:ic
|
||||
ic:R <-- L:c
|
||||
```
|
||||
Das High-Level-Modul ruft lediglich eine Abstraktion eines Low-Level-Moduls auf, welche von einem, oder mehreren Low-Level-Modulen implementiert wurde. Für das High-Level-Modul ist es hier egal, welches Low-Level-Modul die Implementierung bereitstellt. Dadurch erhält man einen viel modulareren Aufbau in der Software. Die einzelnen Module sind auch leichter austauschbar und testbar. Genau diese Modularität macht Dependency Injection möglich.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user