业务层代码复用的一点建议
传统的编写业务层的service类是为每个实体对象生成一个DAO,然后再每个实体DAO对应的service类中注入DAO属性作为服务层组件。这样做代码的可读性很好,层次分明,逻辑清晰。是一种较好的设计方式。
如果考虑到代码软件最本质的特征-复用。减少不必要的编写。我们可以充分考虑Java语言的特征,诸如反射、多态、继承,以达到最大程度的重构。
由此,我们在编写DAO层代码时,可设计一个BaseDAO类,抽象出最顶层的公有行为。
这当然只是一种很简单的方法,你也可以从中抽象和重构出更简单更短小的设计。public class BaseDaoHibernateImpl extends HibernateDaoSupport implements IBaseDao {@Autowiredpublic final void setupSessionFactory(SessionFactory sessionFactory) {setSessionFactory(sessionFactory);}@Overridepublic void saveOrUpdate(Object entity) {getHibernateTemplate().saveOrUpdate(entity);}@Override@SuppressWarnings("unchecked")public void saveOrUpdateAll(Collection entities) {getHibernateTemplate().saveOrUpdateAll(entities);}@Overridepublic void delete(Object entity) {getHibernateTemplate().delete(entity);}@Overridepublic <T> List<T> loadAll(Class<T> entityClass) {return getHibernateTemplate().loadAll(entityClass);}@Overridepublic <T> T get(Class<T> entityClass, Serializable id) {return getHibernateTemplate().get(entityClass, id);}}