Her ikisi de aynı tablo güncelleştiren bir veritabanı erişim nesnesi gerektiren iki sınıf var bir proje var. Çerçevenin ve projenin kısıtlamaları, bu iki sınıfı birleştiremeyeceğim şekilde yapar. Aşağıda kurulumun nasıl olduğunu gösteren bir vaka oluşturdum. Sınıf A'nın kaydı güncelleyebilmesi ve okuyabilmesi gerekirken, Sınıf B'nin kaydı güncelleyebilmesi ve silebilmesi gerekir.
Sınıfları oldukları gibi kullanırsam, gayet iyi çalışır, ancak sınıfların her birinin uygulanması için kullanmadığı işlevsellik gerektirdiği gerçeğiyle ilgili bir sorun yaşıyorum. Örneğin, A sınıfını kullanmak için, asla çağrılmasa bile, silme işlevini uygulayan bir dao iletmem gerekiyor. Benzer şekilde, B sınıfını okuma işlevini uygulayan bir dao'dan geçmek zorundayım ama asla çağrılmayacak.
Başkalarını devralan arabirimlere sahip olarak yaklaşmayı düşündüm (IReaddao, IUpdatedao, IDeletedao, miras alınacak olan daos), ancak bu yaklaşım temel olarak her işlev kombinasyonu için farklı bir arabirim gerektirecektir (IUpdateAndRead, IReadAndDelete, IReadAndUpdate ... )
Uygulamayı veritabanıyla eşleştirmek istemediğim için dao için bir arayüz kullanmak istiyorum. Kimsenin bilmesini istediğim şeyi gerçekleştirmek için bir model veya yöntem var mı? Şimdiden teşekkürler.
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
dan SOLID
). Üzerine biraz okumak isteyebilir.