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?