传统的编写业务层的service类是为每个实体对象生成一个DAO,然后再每个实体DAO对应的service类中注入DAO属性作为服务层组件。这样做代码的可读性很好,层次分明,逻辑清晰。是一种较好的设计方式。
如果考虑到代码软件最本质的特征-复用。减少不必要的编写。我们可以充分考虑Java语言的特征,诸如反射、多态、继承,以达到最大程度的重构。
由此,我们在编写DAO层代码时,可设计一个BaseDAO类,抽象出最顶层的公有行为。
在业务层,编写服务组件时,也可以抽象出一个BaseService类,集合公有行为。
其他业务层服务组件,可以
当然,配置文件需配置bean的父子关系.
这当然只是一种很简单的方法,你也可以从中抽象和重构出更简单更短小的设计。
如果考虑到代码软件最本质的特征-复用。减少不必要的编写。我们可以充分考虑Java语言的特征,诸如反射、多态、继承,以达到最大程度的重构。
由此,我们在编写DAO层代码时,可设计一个BaseDAO类,抽象出最顶层的公有行为。
public void save(Object entityObj);
public void update(Object entityObj);
public Object findById(Class cls, Integer id);
public List<Object> findByProperty(String hql, Object property);
public List<Object> findByHql(String hql, Object[] values);
public List<Object> findBySql(String sql, Object property);
public List<Object> findBySql(String sql, Object[] values);
在业务层,编写服务组件时,也可以抽象出一个BaseService类,集合公有行为。
public class BaseService {
private BaseDAO baseDAO;
// setter method
// 共有方法
}
其他业务层服务组件,可以
extends BaseService
达到公有复用。当然,配置文件需配置bean的父子关系.
<bean id="" class="" parent="BaseService"></bean>
这当然只是一种很简单的方法,你也可以从中抽象和重构出更简单更短小的设计。