Ich habe ein Projekt, in dem ich zwei Klassen habe, für die beide ein Datenbankzugriffsobjekt erforderlich ist, das dieselbe Tabelle aktualisiert. Die Einschränkungen des Frameworks und des Projekts machen es so, dass ich diese beiden Klassen nicht kombinieren kann. Ich habe unten einen Fall erstellt, der zeigt, wie das Setup ist. Klasse A muss in der Lage sein, den Datensatz zu aktualisieren und zu lesen, während Klasse B in der Lage sein muss, den Datensatz zu aktualisieren und zu löschen.
Wenn ich die Klassen so verwende, wie sie sind, funktioniert es einwandfrei, aber ich habe ein Problem damit, dass jede der Klassen Funktionen benötigt, deren Implementierung nicht verwendet wird. Um beispielsweise Klasse A zu verwenden, muss ich ein Dao übergeben, das die Löschfunktion implementiert, obwohl sie niemals aufgerufen wird. Ebenso muss ich Klasse B ein Dao übergeben, das die Lesefunktion implementiert, aber niemals aufgerufen wird.
Ich dachte darüber nach, es durch Schnittstellen zu erreichen, die andere erben (IReadDao, IUpdateDao, IDeleteDao sind die Daos, von denen geerbt werden würde), aber dieser Ansatz würde grundsätzlich eine andere Schnittstelle für jede Funktionskombination erfordern (IUpdateAndRead, IReadAndDelete, IReadAndUpdate ... )
Ich möchte eine Schnittstelle für das Dao verwenden, da ich die Anwendung nicht mit der Datenbank koppeln möchte. Gibt es ein Muster oder eine Methode, um das zu erreichen, was ich will, von dem jeder weiß? Danke im Voraus.
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
von SOLID
). Vielleicht möchten Sie ein bisschen darüber lesen.