J'ai un projet où j'ai deux classes qui nécessitent toutes deux un objet d'accès à la base de données qui met à jour la même table. Les contraintes du framework et du projet font que je ne peux pas combiner ces deux classes. J'ai créé un cas ci-dessous qui montre comment est la configuration. La classe A doit pouvoir mettre à jour et lire l'enregistrement, tandis que la classe B doit pouvoir mettre à jour et supprimer l'enregistrement.
Si j'utilise les classes telles qu'elles sont, cela fonctionne très bien, mais j'ai un problème avec le fait que chacune des classes nécessite des fonctionnalités qu'elle n'utilise pas pour être implémentées. Par exemple, pour utiliser la classe A, je dois lui passer un dao qui implémente la fonction delete, même si elle ne sera jamais appelée. De même, je dois passer en classe B un dao qui implémente la fonction de lecture mais elle ne sera jamais appelée.
J'ai pensé à l'aborder en ayant des interfaces qui héritent des autres (IReadDao, IUpdateDao, IDeleteDao étant les daos dont on hériterait), mais cette approche nécessiterait essentiellement une interface différente pour chaque combinaison de fonctions (IUpdateAndRead, IReadAndDelete, IReadAndUpdate ... )
Je veux utiliser une interface pour le dao parce que je ne veux pas coupler l'application avec la base de données. Existe-t-il un modèle ou une méthode pour accomplir ce que je veux que quiconque sache? Merci d'avance.
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);
}
}
I
de SOLID
). Pourrait vouloir lire un peu là-dessus.