동일한 테이블을 업데이트하는 데이터베이스 액세스 객체가 필요한 두 개의 클래스가있는 프로젝트가 있습니다. 프레임 워크와 프로젝트의 제약으로 인해이 두 클래스를 결합 할 수 없습니다. 아래에서 설정 방법을 보여주는 사례를 만들었습니다. 클래스 A는 레코드를 업데이트하고 읽을 수 있어야하고 클래스 B는 레코드를 업데이트하고 삭제할 수 있어야합니다.
클래스를 그대로 사용하면 제대로 작동하지만 각 클래스에는 구현에 사용되지 않는 기능이 필요하다는 사실에 문제가 있습니다. 예를 들어 클래스 A를 사용하려면 결코 호출되지 않더라도 delete 함수를 구현하는 dao를 전달해야합니다. 마찬가지로, 읽기 기능을 구현하는 클래스 B a dao를 전달해야하지만 호출되지는 않습니다.
다른 인터페이스를 상속받는 인터페이스 (IReadDao, IUpdateDao, IDeleteDao는 상속되는 daos)를 사용하여 접근하는 방법에 대해 생각했지만이 접근법에는 기본적으로 각 기능 조합 (IUpdateAndRead, IReadAndDelete, IReadAndUpdate ...)마다 다른 인터페이스가 필요합니다. )
응용 프로그램을 데이터베이스와 연결하고 싶지 않기 때문에 dao에 대한 인터페이스를 사용하고 싶습니다. 내가 아는 바를 달성하기위한 패턴이나 방법이 있습니까? 미리 감사드립니다.
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
from SOLID
) 의 완벽한 예라고 생각합니다 . 그것에 대해 조금 읽고 싶을 수도 있습니다.