У мене є проект, в якому я маю два класи, які вимагають об'єкта доступу до бази даних, який оновлює ту саму таблицю. Обмеження рамки та проекту роблять це таким, що я не можу поєднати ці два класи. Нижче я створив випадок, який показує, як відбувається налаштування. Клас A повинен мати можливість оновлювати та читати запис, тоді як клас B повинен мати можливість оновити та видалити запис.
Якщо я використовую класи такими, якими вони є, це працює просто чудово, але у мене виникає проблема з тим фактом, що для кожного з класів потрібна функціональність, яку він не використовує. Наприклад, для використання класу A я повинен передати йому дао, який реалізує функцію видалення, навіть якщо вона ніколи не буде викликана. Так само я повинен пройти клас B дао, який реалізує функцію читання, але вона ніколи не буде викликана.
Я думав про наближення до нього, маючи інтерфейси, які успадковують інших (IReadDao, IUpdateDao, IDeleteDao - це даоси, які отримали б у спадок від), але цей підхід в основному вимагає іншого інтерфейсу для кожної комбінації функцій (IUpdateAndRead, IReadAndDelete, IReadAndUpdate ... )
Я хочу використовувати інтерфейс для дао, оскільки я не хочу поєднувати додаток із базою даних. Чи існує закономірність чи метод досягнення того, що я хочу, щоб хтось знав про це? Заздалегідь спасибі.
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
від SOLID
). Можливо, хочете трохи прочитати на ньому.