DAO类负责处理以下所有方法吗?还是最好将某些方法排除在服务层之外?
我发现此接口here。我考虑在代码中重复此接口。
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);
}
最佳答案
GeneralDao上列出的所有方法均与DAO模式兼容。
同样,有可能具有特定于您所使用实体的方法,只要这些方法与从存储中持久/检索有关。 。例如,CustomerDao:除了在GeneralDao上具有方法之外,还可能具有根据与客户相关的条件查找方法。 。 。如果您可以通过一种特定的方式来呈现它,从而导致描述性代码更多,那就更好了。细节并专注于实体没有错。
(CustomerDao,OrderDao,ProductDao,... PilotDao,BookDao等。所有这些都可能具有与该类型的实体的存储和检索有关的独特方法)
您会知道,如果您可以将基础持久性存储交换为其他内容,那么您仍然会遵守DAO模式,并且DAO仍然有意义。