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.