Mam projekt, w którym mam dwie klasy, które obie wymagają obiektu dostępu do bazy danych, który aktualizuje tę samą tabelę. Ograniczenia frameworka i projektu sprawiają, że nie mogę łączyć tych dwóch klas. Utworzyłem poniżej skrzynkę, która pokazuje, jak wygląda konfiguracja. Klasa A musi mieć możliwość aktualizacji i odczytu rekordu, podczas gdy klasa B musi mieć możliwość aktualizacji i usunięcia rekordu.
Jeśli używam klas takimi, jakimi są, działa dobrze, ale mam problem z tym, że każda z klas wymaga funkcjonalności, której nie używa do wdrożenia. Na przykład, aby użyć klasy A, muszę przekazać temu dao, który implementuje funkcję usuwania, nawet jeśli nigdy nie zostanie wywołana. Podobnie, muszę przekazać klasie B dao, który implementuje funkcję odczytu, ale nigdy nie zostanie wywołany.
Pomyślałem o podejściu do niego przez interfejsy, które dziedziczą inne (IReaddę, IUpdate-da, IDeleteexe to daos, które zostaną odziedziczone), ale to podejście wymagałoby zasadniczo innego interfejsu dla każdej kombinacji funkcji (IUpdateAndRead, IReadAndDelete, IReadAndUpdate ... )
Chcę użyć interfejsu dla dao, ponieważ nie chcę łączyć aplikacji z bazą danych. Czy istnieje wzór lub metoda realizacji tego, czego chcę, o czym ktoś wie? Z góry dziękuję.
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
od SOLID
). Może chciałbym trochę o tym przeczytać.