浏览 6445 次
锁定老帖子 主题:Action + DAO 模式,可以吗
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2006-05-28
/** * @author Leon Li */ public interface CoreEntityManager { public static String ERROR_NAME_DUPLICATED = "error.name.dupliacted"; public static String ERROR_UNKNOWN_DATABASE = "error.unknown.database"; public static String ERROR_OBJECT_NONEXIST = "error.object.nonexist"; public Class getPersistentClass();; public PersistentEntity getEntityObjectById(Class persistentClass, Serializable id);; public PersistentEntity loadEntityObjectById(Class persistentClass, Serializable id);; public Object getCurrentSession(); throws BBA96Exception; public Serializable save(PersistentEntity object); throws BBA96Exception; public void persist(PersistentEntity object); throws BBA96Exception; public void update(PersistentEntity object); throws BBA96Exception; public void refresh(PersistentEntity object); throws BBA96Exception; public void merge(PersistentEntity object); throws BBA96Exception; public void saveOrUpdate(PersistentEntity object); throws BBA96Exception; public void remove(PersistentEntity object); throws BBA96Exception; public void flush(); throws BBA96Exception; public void clear(); throws BBA96Exception; public void evict(PersistentEntity object); throws BBA96Exception; public void batchSave(List objects); throws BBA96Exception; public void batchUpdate(List objects); throws BBA96Exception; public void batchSaveOrUpdate(List objects); throws BBA96Exception; public void batchRemove(List objects); throws BBA96Exception; public List findByQueryObject(QueryObject queryObject, boolean cacheable, int startIndex, int maxResultCount);; // the below method only for special usage, normally find data by query object for the AOP Management /** * @deprecated */ public List findByHQL(String hql, boolean cacheable, int startIndex, int maxResultCount);; public List findByExpQL(final String expql, final String[] names, final Object[] values, final boolean cacheable, final int startIndex, final int maxResultCount);; public List findBySQL(String sql, Class persistentClass, boolean cacheable, int startIndex, int maxResultCount);; public List findBySQL(String sql, String alias, Class persistentClass, boolean cacheable, int startIndex, int maxResultCount);; public int countBySQL(String sql, String alias);; public Object findValueBySQL(String sql, String scalar, Object type);; } 对于这样的增、删、改、查的操作,不包含任何的商业逻辑,看不出要扩展的必要,如果考虑到权限,也是在Action这一层来完成,与实体没有任何的关系。我觉得完全没有必要用再加上Service这一层。非常的重,代码也显的很冗余。不可以直接在Action中调用BaseDao的操作就OK了,这样程序就写的很轻便了。 但是我在实际工作中,发现很多人都是这样写,而不用Action +DAO的方式,而我却经常这样写,所以很疑惑,难道这是反模式吗? 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2006-05-29
Robbin 自己说过,他就是DAO跟Serivce层合并的。
这个分层其实跟模式没有直接关系,主要还是架构问题。 比如你在系统中用spring的aop实现事务管理。 事务管理绑定到Service层,而不是DAO层,事务组合就少一些问题。 但是如果,你在DAO里自己做事务处理,那Service层真的没啥必要。 |
|
返回顶楼 | |
发表时间:2006-05-29
我觉得,
单纯的说架构的优劣意义不大。 譬如系统中分几层的问题。 3层,5层都可以嘛,只是结合具体的项目的大小,复杂度来说总有一个适合这个项目的架构。 所以我觉得像lz说的这种情况 砍掉Service不是不可以。 我以前做过一个小型下载网站就是这样子的,感觉没有Service照样看起来很清晰。开发也很舒服啊。 |
|
返回顶楼 | |
发表时间:2006-05-30
如果你的系统中还有webservice等模块的话,service还是很有必要的
|
|
返回顶楼 | |
发表时间:2006-06-02
我很感兴趣的是对于可能抛出的BBA96Exception 你们都是怎么处理的?
|
|
返回顶楼 | |
发表时间:2006-07-08
呵呵,上面的代码是以前写的了,现在重构过了,不过还是有DAO/Service层,参见 http://www.springside.org.cn 中bba96-tiger的jar(含原代码)的代码。
要抛出的BBA96Exception是因为某些Checked Exception,目前用到的是关于权限的Exception 仅在action控制的权限控制能力过于小,不再讨论范围内,即使是acegi,没有持久层的支持,应用范围也是有限,在复杂应用以及大数据应用肯定不能胜任。 |
|
返回顶楼 | |
发表时间:2006-09-12
根据你项目的复杂度来看,如果你需要有复杂的业务逻辑,那么需要写在service层,如果按照你说的那样,也可以用dao+action
|
|
返回顶楼 | |
发表时间:2006-09-13
可以不要
我也是经常要了 因为事务处理要方便一些了 |
|
返回顶楼 | |