DI e accoppiamento stretto tra i moduli?

0

Sto cercando di capire DI, ma sembra essere confuso su come le interfacce tra i moduli rimangono disaccoppiate.

Supponiamo che abbia due directory per ciascuno dei moduli A e B

PACCHETTO A

package A

interface InterfaceA {
    public function run():Void;
}

e

package A

class ConcreteA implements InterfaceA {
    public function run():Void { ... }
}

PACCHETTO B

package B

import A

interface InterfaceB {
    public function new(a:InterfaceA);
    public function run():Void;
}

e

package B

import A

class ConcreteB implements InterfaceB {

    private var a:InterfaceA;

    public function new(a:InterfaceA) { this.a = a; }
    public function run():Void { this.a.run(); }
}

Potrei usare ConcreteB in un altro modulo come questo

ClientApp

package Client
import A
import B

class Main {
   function new():Void {
      var b:ConcreteB = new ConcreteB(new ConcreteA());
      b.run();
   }
}

La mia domanda è, i moduli non sono ora strettamente accoppiati?

Anche se non importa il modulo A in ClientApp (e fare qualcosa come creare un'implementazione concreta di InterfaceA nel modulo B da utilizzare invece), ho ancora bisogno di avere entrambe le cartelle A e B nel mio progetto affinché ClientApp possa compilare correttamente.

Questo accoppiamento sostanzialmente stretto è elevato al livello del modulo? Come dovrei o dovrei mitigarlo?

È mai un problema preoccuparsi che l'InterfaceB nel modulo B abbia una dipendenza del modulo strettamente accoppiato sul modulo A?

    
posta Danny Yaroslavski 04.05.2017 - 00:37
fonte

0 risposte

Leggi altre domande sui tag