回复:《如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件》
?
?
package com.htxx.thps.psb.dao.imp; import com.htxx.service.dao.BasicDao; import com.htxx.service.dao.Condition; import com.htxx.service.dao.ResultSet; import com.htxx.thps.model.PsPsb; import com.htxx.thps.model.PsPsjcd; import com.htxx.thps.model.PsWtmx; import com.htxx.thps.psb.dao.PsbDao; /** * @author FanGang */ public class PsbDaoImp extends BasicDao implements PsbDao { /* (non-Javadoc) * @see com.htxx.thps.psb.dao.PsbDao#getPsb(java.lang.String) */ public PsPsb getPsb(String id) { return (PsPsb)this.load(PsPsb.class, id); } /* (non-Javadoc) * @see com.htxx.thps.psb.dao.PsbDao#updatePsb(com.htxx.thps.model.PsPsb) */ public void updatePsb(PsPsb vo) { this.update(vo); } /* (non-Javadoc) * @see com.htxx.thps.psb.dao.PsbDao#getPsb(com.htxx.service.dao.Condition) */ public ResultSet getPsb(Condition condition) { return this.query("PsPsb", condition); } public PsPsjcd getPsjcd(String id) { return (PsPsjcd)this.load(PsPsjcd.class, id); } public ResultSet getPsjcd(Condition condition) { return this.query("PsPsjcd", condition); } public PsWtmx getWtmx(String id) { return (PsWtmx)this.load(PsWtmx.class, id); } public ResultSet getWtmx(Condition condition) { return this.query("PsWtmx", condition); } public void updatePsjcd(PsPsjcd vo) { this.update(vo); } public void updateWtmx(PsWtmx vo) { this.update(vo); } } ??4. DaoSupport的适应范围?
?
DaoSupport是对spring的封装,spring是对hibernate的封装。从整个体系结构我们不难得出结论,DaoSupport只适用于采用DAO的方式进行数据持久化的应用。其它非DAO的应用,比如使用JDBC直接执行SQL,或者执行创建数据库、创建表空间等操作,都不在DaoSupport的适用范围内。
?
?5. 如何解决其它问题
但是,我们的开发肯定会遇到使用DaoSupport解决不了的问题,比如我要执行复杂的查询,我要使用SQL和HQL。当我们需要使用SQL和HQL,甚至我们还要使用session执行一些操作的时候,我们的代码就应当处于我们体系结构的spring同级甚至更低的层次结构上了,就不应当使用DaoSupport,而是根据所写的代码将其放到合理的层次上实现。有的代码可能还会跨越多个层次。比如如果我要使用许多Oracle独有的函数实现一个功能,这些方法可以应用在Oracle数据库中,却不能应用在其它数据库中,那么我是不是应当有一个不考虑具体数据库的应用层以及它对这种数据库的实现层。有的问题不在DaoSupport的应用范围,比如我们使用JDBC直接执行SQL语句,显然不在范围之内,是不是应当把它交给与DaoSupport在同一层次的JDBCSupport,封装spring的JdbcTemplate。
?
总之,DaoSupport是对spring的HibernateTemplate的封装(假如我们采用spring+hibernate的技术框架),它适用于采用DAO的方式进行数据持久化的应用,解决的是采用继承的方式带来的对spring和hibernate具体技术框架的依赖。我在《如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件结构》中已经给出了这个结构的一个实现,供大家参考.
?
?
?
?
?
1 楼 retreat 2007-02-08 概念通俗易懂!但是对低偶合的说明似乎不够充分!我认为Spring 的DaoSupport和HibernateTemplate之间是高偶合的。这么做只是为了简化Dao设计和有针对性锐化s+h的架构!
s的低偶合是体现在结构分层上! 比如 有针对的对Hibernate,JDO提供了接口,对于其他的持久层也可以通过jca注入。web mid, bus都有明显的逻辑上的区分! 2 楼 fangang 2007-02-08 也许retreat朋友可以看看我的《如何在struts+spring+hibernate的框架下构建低耦合高内聚的软件》,在这里面我详细描述了我的设计。在这个结构中,DaoSupport是一个接口,它有具体的实现,比如DaoSupportHibernate3Imp,而Daos也不是直接使用DaoSupport,而是通过基础类BasicDao使用DaoSupport。如此结构使得spring的HibernateTemplate与Daos解耦。