Abbiamo una tipica applicazione java n-tier e ho notato che i nostri livelli di accesso ai dati hanno DAO che sono del tipo FooDAO e FooDAOImpl. Stavo cercando di giustificare la necessità dei due ed ecco la mia analisi.Necessità di interfaccia separata e impl per DAO
- Se si dispone di più implementazioni per la stessa interfaccia, l'astrazione è utile. Ma dato che abbiamo già fatto la scelta del framework da utilizzare per il DAOImpl (ad esempio iBATIS), è davvero necessario?
- Guida in collegamento tramite Spring. Da quanto ho capito, le classi che hanno interfacce possono essere facilmente condivise (andando sulla rotta JdkProxy) piuttosto che le classi che non hanno interfacce (dove viene scelta la route cglib) e una ha la sottoclasse della classe da proxy. La sottoclasse ha i suoi problemi in cui la classe proxy è definitiva o non ha costruttori predefiniti, entrambi altamente improbabili nel livello di accesso ai dati. Le prestazioni erano un fattore, ma da quello che ho sentito, non è più motivo di preoccupazione.
- Aiuto in beffa. Le classi con interfacce sono più adatte a essere derise da strutture di derisione. Ho solo sentito questo, ma non l'ho visto in pratica - quindi non posso davvero contare su di esso, ma forse a causa degli stessi fattori menzionati al punto # 2 sopra.
Con questi punti, non sento la reale necessità di un FooDAO e FooDAOImpl separati in cui un semplice FooDAO dovrebbe essere sufficiente. Sentiti libero di correggere qualsiasi punto che ho menzionato.
Grazie in anticipo!
A meno che non mi sbagli, non fai una domanda qui? I vantaggi dell'uso di interfacce con l'iniezione sono già indicati nella tua "domanda" ... – steelshark
Sì, hai indicato tre buoni motivi per utilizzare un'interfaccia e un'implementazione del tuo DAO. Avrei tratto la conclusione opposta a te, cioè che è necessario avere un'interfaccia! –
@ user935439 La domanda è in ciascun punto elenco. Mentre concordiamo in linea di massima sui vantaggi delle interfacce, ho voluto raccogliere opinioni sull'appetito di ridurre i file di classe che devo scrivere e mantenere quando i vantaggi dell'interfaccia in tale caso d'uso non sono del tutto evidenti. Sai con esempi se il mocking è più facile quando hai delle interfacce coinvolte? Grazie! – Kilokahn