Saya punya proyek di mana saya memiliki dua kelas yang keduanya memerlukan objek akses database yang memperbarui tabel yang sama. Batasan-batasan dari kerangka kerja dan proyek membuatnya sehingga saya tidak dapat menggabungkan kedua kelas ini. Saya telah membuat case di bawah ini yang menunjukkan bagaimana pengaturannya. Kelas A harus dapat memperbarui dan membaca catatan, sedangkan kelas B harus dapat memperbarui dan menghapus catatan.
Jika saya menggunakan kelas sebagaimana adanya, itu berfungsi dengan baik, tetapi saya mengalami masalah dengan fakta bahwa masing-masing kelas membutuhkan fungsionalitas yang tidak digunakan untuk diimplementasikan. Misalnya, untuk menggunakan kelas A, saya harus memberikannya dao yang mengimplementasikan fungsi delete, meskipun tidak akan pernah dipanggil. Demikian pula, saya harus lulus kelas B a dao yang mengimplementasikan fungsi baca tetapi tidak akan pernah dipanggil.
Saya berpikir untuk mendekatinya dengan memiliki antarmuka yang mewarisi yang lain (IReadDao, IUpdatePOR, IDeletePOR menjadi daos yang akan diwarisi dari), tetapi pendekatan ini pada dasarnya akan memerlukan antarmuka yang berbeda untuk setiap kombinasi fungsi (IUpdateAndRead, IReadAndDelete, IReadAndUpdate ... )
Saya ingin menggunakan antarmuka untuk dao karena saya tidak ingin memasangkan aplikasi dengan database. Apakah ada pola atau metode untuk mencapai apa yang saya inginkan yang diketahui orang lain? Terima kasih sebelumnya.
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
dari SOLID
). Mungkin ingin membaca sedikit tentang itu.