Tôi có một dự án trong đó tôi có hai lớp yêu cầu một đối tượng truy cập cơ sở dữ liệu cập nhật cùng một bảng. Các ràng buộc của khung và dự án làm cho nó để tôi không thể kết hợp hai lớp này. Tôi đã tạo ra một trường hợp dưới đây cho thấy cách thiết lập. Lớp A cần có khả năng cập nhật và đọc bản ghi, trong khi lớp B cần có khả năng cập nhật và xóa bản ghi.
Nếu tôi sử dụng các lớp như hiện tại, nó hoạt động tốt, nhưng tôi gặp vấn đề với thực tế là mỗi lớp đều yêu cầu chức năng mà nó không sử dụng để thực hiện. Ví dụ, để sử dụng lớp A, tôi phải truyền cho nó một dao thực hiện chức năng xóa, mặc dù nó sẽ không bao giờ được gọi. Tương tự, tôi phải vượt qua lớp B a dao thực hiện chức năng đọc nhưng nó sẽ không bao giờ được gọi.
Tôi đã nghĩ đến việc tiếp cận nó bằng cách có các giao diện kế thừa các giao diện khác (IReadDao, IUpdateDao, IDeleteDao là các dao sẽ được kế thừa từ đó), nhưng về cơ bản, cách tiếp cận này sẽ yêu cầu một giao diện khác nhau cho mỗi tổ hợp chức năng (IUpdateAndRead, IReadAndDead, IReadAndDead )
Tôi muốn sử dụng giao diện cho dao vì tôi không muốn ghép ứng dụng với cơ sở dữ liệu. Có một mô hình hoặc phương pháp để thực hiện những gì tôi muốn mà bất cứ ai biết về? Cảm ơn trước.
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
từ SOLID
). Có thể muốn đọc một chút về nó.