同じテーブルを更新するデータベースアクセスオブジェクトを必要とする2つのクラスがあるプロジェクトがあります。フレームワークとプロジェクトの制約により、これら2つのクラスを組み合わせることはできません。以下のケースを作成して、セットアップ方法を示します。クラスAはレコードを更新および読み取りできる必要があり、クラスBはレコードを更新および削除できる必要があります。
クラスをそのまま使用すると問題なく機能しますが、各クラスが実装に使用していない機能を必要とするという問題があります。たとえば、クラスAを使用するには、削除関数が呼び出されない場合でも、削除関数を実装するdaoを渡す必要があります。同様に、クラスBにread関数を実装する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
)の完璧な例だと思います。少し読みたくなるかもしれません。