Ho un'interfaccia per comunicare con un DB (in realtà non è un database, ma questo per dare un esempio concreto):
interface DbInterface{
    Result sendQuery(Query q);
}
E sto cercando di migliorare la riusabilità separando componenti specifici in singoli progetti:
- App1, un'applicazione che richiede l'accesso a un database
 - App2, un'applicazione che richiede l'accesso a un database
 - DB1, un'implementazione concreta di DbInterface (diciamo SQL)
 - DB2, un'implementazione concreta di DbInterface (diciamo usando un database NoSql)
 
 Come si progetta in genere una tale architettura e dove dovrebbe essere posizionato   DbInterface   ? 
- in una delle applicazioni? ma ciò significa che tutti gli altri tre componenti dipendono da quel progetto per accedere all'interfaccia - non suona bene
 - in una delle implementazioni DB? stesso - non suona bene.
 - in entrambe le implementazioni DB? duplicazione del codice.
 - in un progetto separato, che conterrebbe solo quell'interfaccia? sembra abusivo includere una dipendenza solo per un'interfaccia.
 
Per riferimento, questo è Java + Maven, ma il problema è abbastanza generico, suppongo.