Ho un progetto in cui ho due classi che richiedono entrambi un oggetto di accesso al database che aggiorni la stessa tabella. I vincoli del framework e del progetto fanno sì che non possa combinare queste due classi. Ho creato un caso qui sotto che mostra come è il setup. La classe A deve essere in grado di aggiornare e leggere il record, mentre la classe B deve essere in grado di aggiornare ed eliminare il record.
Se uso le classi così come sono, funziona perfettamente, ma sto avendo un problema con questo fatto che ciascuna delle classi richiede funzionalità che non sta utilizzando per essere implementate. Ad esempio, per usare la classe A, devo passargli un dao che implementa la funzione delete, anche se non verrà mai chiamata. Allo stesso modo, devo passare la classe B a dao che implementa la funzione di lettura ma non verrà mai chiamata.
Ho pensato di approcciarlo avendo interfacce che ereditassero gli altri (IReadDao, IUpdateDao, IDeleteDao da cui sarebbe stato ereditato), ma questo approccio richiederebbe fondamentalmente un'interfaccia diversa per ogni combinazione di funzioni (IUpdateAndRead, IReadAndDelete, IReadAndUpdate ...)
Voglio usare un'interfaccia per il dao perché non voglio accoppiare l'applicazione con il database. C'è uno schema o un metodo per realizzare ciò che voglio che qualcuno sappia? Grazie in anticipo.
class IDao {
void update(ModelDao model);
void delete(String guid);
ModelDao read(String guid);
}
Class A {
private IDao dao;
public A(IDao dao) {
this.dao = dao;
}
public void doStuff() {
ModelDao model = new ModelDao();
...
dao.update(model);
}
public void readThenDoSomething(String id) {
ModelDao model = dao.read(id);
...
}
}
Class B {
private IDao dao;
public B(IDao dao) {
this.dao = dao;
}
public void makeUpdate() {
ModelDao model = new ModelDao();
...
dao.update(model);
}
public void delete(String id) {
dao.delete(id);
}
}