DAO仅负责CRUD操作吗?

4
DAO类负责处理所有以下方法吗?还是最好将某些方法排除到服务层中?
我在这里找到了这个接口(http://code.google.com/p/hibernate-generic-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);
}
2个回答

4

你的GeneralDao中列出的所有方法都与DAO模式兼容。

此外,只要这些方法与存储相关的实体有关,就可以拥有特定于实体的方法。例如,一个CustomerDao:除了在GeneralDao上拥有的方法之外,还可以拥有按照与客户相关的标准查找的方法。如果您能以一种特定的方式呈现它,这将导致更加具体的代码,那就更好了。特定和专注于实体并没有错。

(CustomerDao,OrderDao,ProductDao,PilotDao,BookDao等都可以拥有关于该类型实体的唯一方法来进行存储和检索)

如果您可以将基础持久性存储替换为其他内容,并且DAO仍然有意义,则说明您仍在遵守DAO模式。


1

DAO(数据访问对象)主要用于提供对底层数据存储的抽象,并将其他模块与底层DBMS和架构的担忧隔离开来。只要您不使用DAO来保留业务逻辑或任何与数据访问无关的内容,我认为您就可以放心使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接