Sono leggermente confuso su quanto segue:
ProjectA
-------- GetUsers (Implements IDBConnector)
-------- IGetUsers
-------- UserModel
ProjectB
-------- Main
Ho due progetti un progetto principale (progetto B) e un altro che ottiene i dati da un database (progetto A). Il progetto A ha un'interfaccia che la classe principale utilizza. La classe GetUsers viene quindi inserita nella classe principale di tipo IGetUsers.
Questo significa che esiste una dipendenza del Progetto A per il Progetto B poiché il Progetto B deve sapere come viene definita l'interfaccia e la definizione della classe stessa. Sto bene con questo dal punto di vista del codice, ma non posso fare a meno di pensare che l'interfaccia debba essere mantenuta da qualche altra parte in quanto è essenzialmente un contratto e sto cercando di seguire il principio aperto / chiuso, cioè non dovrei toccare il classe principale per modificare il modo in cui viene gestita l'interazione del database. Nel mio esempio, tuttavia, se rimuovo il progetto A, perdo la definizione dell'interfaccia e dovrei modificare la classe Main.
Avrei pensato che il Progetto B sarebbe un buon posto per mantenere l'interfaccia, ma questo risulterebbe in un riferimento circolare poiché il Progetto A avrebbe bisogno di fare riferimento al Progetto A per la dichiarazione dell'interfaccia e viceversa per l'implementazione della classe.
L'altra opzione è di avere un progetto separato per le interfacce che ho visto menzionato in questa domanda:
Condivisione di classi o interfacce tra diversi progetti
Ma a me sembra un po 'sciocco avere questa interfaccia di esempio in un intero progetto separato mentre c'è solo un'interfaccia al momento.