4

DAOクラスは以下のすべてのメソッドを処理する責任がありますか?または、一部のメソッドをサービスレイヤーに除外する方がよいでしょうか。

私はここでこのインターフェースを見つけました。そして、私のコードでこのインターフェースを繰り返すことを考えています。

public interface GeneralDAO {

        public <T> T find(Class<T> type, Serializable id);

        public <T> T[] find(Class<T> type, Serializable... ids);

        public <T> T getReference(Class<T> type, Serializable id);

        public <T> T[] getReferences(Class<T> type, Serializable... ids);

        public boolean save(Object entity);

        public boolean[] save(Object... entities);

        public boolean remove(Object entity);

        public void remove(Object... entities);

        public boolean removeById(Class<?> type, Serializable id);

        public void removeByIds(Class<?> type, Serializable... ids);

        public <T> List<T> findAll(Class<T> type);

        public List search(ISearch search);

        public Object searchUnique(ISearch search);

        public int count(ISearch search);

        public SearchResult searchAndCount(ISearch search);

        public boolean isAttached(Object entity);

        public void refresh(Object... entities);

        public void flush();

        public Filter getFilterFromExample(Object example);

        public Filter getFilterFromExample(Object example, ExampleOptions options);
}
4

2 に答える 2

4

GeneralDaoにリストされているすべてのメソッドは、DAOパターンと互換性があります。

また、ストレージからの永続化/取得に関連する限り、操作するエンティティに固有のメソッドを持つことも可能です。。たとえば、CustomerDao:GeneralDaoにメソッドがあるほかに、顧客に関連する基準で検索するメソッドがある場合があります。。。より記述的なコードにつながる特定の方法でこれを提示できる場合は、はるかに優れています。詳細とエンティティに焦点を当てることに問題はありません。

(CustomerDao、OrderDao、ProductDao、.. PilotDao、BookDaoなど。これらはすべて、そのタイプのエンティティの保存と取得に関連する独自のメソッドを持つことができます)

基盤となる永続ストアを他のものと交換できれば、DAOパターンを引き続き尊重していることがわかりますが、DAOは依然として理にかなっています。

于 2013-01-18T06:48:08.083 に答える
1

DAO■(呼び出されるデータアクセスオブジェクト)は、主に、基盤となるデータストアに抽象化を提供し、基盤となるDBMSとスキーマの心配から他のモジュールを分離することを目的としています。ビジネスロジックやデータアクセスに関係のないものを維持するためにDAOを使用していない限り、私はあなたが良いと思います。

于 2013-01-18T07:01:41.027 に答える