1.假设有如下的业务方法类:
- import java.util.Map;
-
-
-
-
-
- public class TestService {
- BaseDao dao = new BaseDao();
- public Object findById(Map params){
-
-
-
- Object obj =null;
- String id = null;
- try{
- id = (String)params.get("id");
- }
- catch(Exception e){
- e.printStackTrace();
- return error();
- }
-
-
-
- try{
- obj = dao.findById(id);
- return ok();
- }
- catch(Exception e){
- e.fillInStackTrace();
- return error();
- }
- }
-
- public Object findByPage(Map params){
-
- Object obj =null;
- int pageNo,pageSize;
-
-
-
- try{
- pageNo =(Integer) params.get("pageNo");
- pageSize = (Integer)params.get("pageSize");
- }
- catch(Exception e){
- e.printStackTrace();
- return error();
- }
-
-
-
- try{
- obj = dao.findByPage(pageNo, pageSize);
- return ok();
- }
- catch(Exception e){
- e.fillInStackTrace();
- return error();
- }
- }
-
- public Object error(){
- return "error";
- }
- public String ok(){
- return "ok";
- }
- }
-
-
-
-
-
- class BaseDao{
- public Object findById(String id){ return null;}
- public Object findByPage(int pageNo,int pageSize){ return null;}
- }
应该可以看出findById和findByPage结构是完全相同的.
先校验参数合法性,再根据参数获取结果,并且分别做异常处理.
如果业务方法增加的话,程序中会充斥了大量的异常处理代码.
如何减少这些重复的异常处理代码呢?
2.引入模板模式和回调接口
代码如下:
-
-
-
-
-
- interface ServiceCallback {
-
-
-
-
- public void checkAndSetParamters();
-
-
-
-
-
-
- public Object getResult() throws Exception;
- }
-
-
-
-
-
- public class ServiceTemplate {
-
- public Object execute(ServiceCallback callback) {
- try {
- callback.checkAndSetParamters();
- } catch (Exception e) {
- e.printStackTrace();
- return error();
- }
- try {
- Object obj = callback.getResult();
- return ok();
- } catch (Exception e) {
- e.fillInStackTrace();
- return error();
- }
- }
-
- public Object error() {
- return "error";
- }
-
- public String ok() {
- return "ok";
- }
- }
3.改写业务方法类
-
-
-
-
-
- public class TestService2 extends ServiceSupport{
- public Object findByPage(final Map params) {
- return getServiceTemplate().execute(new ServiceCallback() {
- int pageNo, pageSize;
- public void checkAndSetParamters() {
- pageNo = (Integer) params.get("pageNo");
- pageSize = (Integer) params.get("pageSize");
- }
- public Object getResult() throws Exception {
- return getDao().findByPage(pageNo, pageSize);
- }
- });
- }
-
- public Object findById(final Map params) {
- return getServiceTemplate().execute(new ServiceCallback() {
- String id = null;
- public void checkAndSetParamters() {
- id = (String)params.get("id");
- }
- public Object getResult() throws Exception {
- return getDao().findById(id);
- }
- });
- }
- public BaseDao getDao() {
- return new BaseDao();
- }
- }
-
-
-
-
-
- class ServiceSupport{
- public ServiceTemplate getServiceTemplate() {
- return new ServiceTemplate();
- }
- }