Mi trovo in una situazione in cui una parte del mio sistema ha una dipendenza da un altro modulo nello stesso sistema, ma i moduli stessi devono rimanere indipendentemente distribuibili, dove le parti da cui dipendono saranno riempite con un'altra implementazione.
Un modulo in questo caso è il concetto di un gruppo di componenti che contribuiscono tutti a servire una funzione aziendale. Il sistema è anche costruito in C #.
Quindi, dove dipendo da un altro modulo, il modulo sorgente definisce un'interfaccia che descrive le funzioni di cui ha bisogno il modulo del partito dipendente da implementare. I tipi di contratto (oggetti del modello di dominio) sono anche interfacce per il modulo dipendente.
Ecco dove diventa un po 'confuso per me. Il principio di inversione di dipendenza non si trova bene nella mia testa a questo punto. Entrambi questi "moduli" hanno la stessa importanza l'uno dell'altro. Quale dovrebbe definire le interfacce e forzare l'altro a farvi riferimento? Sospetto che un terzo progetto sia inserito tra i moduli che gestiscono l'impostazione delle dipendenze (probabilmente un contenitore DI). Le entità dei moduli dovrebbero essere interfacciate? Sono semplicemente sacchetti di get / set (non DDD qui).
Qualcuno può offrire una guida qui?
Grazie in anticipo.
Modifica 1:
La struttura del progetto:
Module1.Interfaces IModuleOneServices Module1.Models ModuleOneDataObject Module1 Module1 implements IModuleOneServices Module2.Interfaces IModuleTwoServices Module2.Models ModuleTwoDataObject - has property of type ModuleOneDataObject Module2 Module2 implements IModuleTwoServices depends on IModuleOneServices
Il modulo2 deve essere distribuibile da solo, e rimane compilabile, e talvolta può essere eseguito senza presentare Module1.