我们在学习design patterns的时候都了解过分层的概念。通常情况下,我们会分为action、manager、dao,manager和dao会再次分为interface和impl,为的是遵循设计模式六大原则的依赖倒置原则(Dependence Inversion Principle)–面向接口编程。
在manager和dao层中有很多方法是类似的,比如save、findById、delete…..为了加强代码的复用,我们一般会抽出BaseManager和BaseDao,每条业务线的interface和impl会先继承BaseManager或BaseDao,BaseManager和BaseDao没有的方法,再在自己的业务线写。
BaseManager和BaseDao的作用我们了解了,所以不管是我们自己封装,还是用框架,底层原理都是一样的。这里我们使用net.sunniwell.core的BaseManager和EntityDao替换上文提到的BaseManager和BaseDao。
1.action公共的部分,我们抽出了一个BaseAction,我们自己的action继承BaseAction;
import net.sf.json.JSONObject;
public class BaseAction<T> {
public String OK(){
JSONObject jo=new JSONObject();
jo.put("result", "ok");
return jo.toString();
}
public String EXSIT(){
JSONObject jo=new JSONObject();
jo.put("result", "exist");
return jo.toString();
}
public String ERROR(String message){
JSONObject jo=new JSONObject();
jo.put("result", "error");
jo.put("message", message);
return jo.toString();
}
}
@Controller
@RequestMapping( "/******" )
public class ******Action extends BaseAction {
private Logger log = Logger.getLogger( this.getClass() );
...
}
2.manager公共的部分,我们用net.sunniwell.core提供的Manager和BaseManager;
import net.sunniwell.core.orm.manager.Manager;
public interface ******Manager extends Manager<******Entity> {
void save(******Entity info);
}
import net.sunniwell.core.orm.manager.BaseManager;
@Service
public class ******ManagerImpl extends BaseManager<******Entity, ******Dao> implements ******Manager {
@Resource
private ******Dao ******Dao;
@Audit(action = "******")
public void save(****** info) {
...
}
}
3.dao公共的部分,我们用net.sunniwell.core提供的EntityDao和HibernateEntityDao;
import net.sunniwell.core.orm.dao.EntityDao;
public interface ******Dao extends EntityDao<******Entity> {
}
import net.sunniwell.core.orm.dao.HibernateEntityDao;
import org.springframework.stereotype.Repository;
@Repository
public class ******DaoImpl extends HibernateEntityDao<******Entity> implements ******Dao {
}
这样,我们便可以在******ManagerImpl调用******Dao的findBy()系列、findUniqueBy()系列、pageQuery()系列、removeBy()、saveOrUpdate()….
daoapi.jar下载地址: http://pan.baidu.com/s/1slKUMHf 密码: 8gvh。