Supponiamo che abbia MasterPackage
contenente una classe Master
e BlasterPackage
contenente Blaster
class. Poiché Master
ha bisogno di un Blaster
per funzionare, il livello più alto MasterPackage
dipende direttamente sul% di livello inferioreBlasterPackage
.
Usando Classic Dependency Inversion, si aggiungerebbe IBlaster
(o AbstractBlaster
) a MasterPackage
, quindi invertendo la dipendenza tra i pacchetti.
Ma di fronte a questo problema, mi sono reso conto che potevo creare un terzo pacchetto - chiamiamolo MasterBlasterInterfaces
- e mettere lì IBlaster
. Ciò "delegherebbe" la dipendenza a quel terzo, pacchetto comune, e i due pacchetti originali sarebbero ora disaccoppiati l'uno dall'altro.
Ma poi, se ho un pacchetto a livello higer chiamato ThunderDome
, dovrà trattare direttamente con BlasterPackage
, non è vero? Mi sembra che violi l'incapsulamento, mentre con la dipendenza diretta Master
è possibile astrarre l'esistenza stessa di Blaster
.
Quindi la domanda è:
Is there a good set of criteria to choose between inversion vs. delegation of dependencies? And how one vs. other impacts use of the packages by higher-level application layers?