xo_tobacoo 2009-04-17 14:41
浏览 243
已采纳

一年半之前的疑问,再问一遍,基础的

缘起:07年8月进公司发现公司的控制页面跳转和功能执行方式如下,
jsp页面存放两个隐藏参数:
1)view:决定处理类型;
2)action:决定处理方式:
3)服务器端controller代码结构:
[code="java"]
if(view.equals("insert")){
if("insertProjectMes".equals(action)){
}
if("insertPictures".equals(action)){
}
...
}
else if(view.equals("update")){
...
}
else if(view.equals("select")){
...
}
else if(view.equals("delete")){
...
}
[/code]

每个controller十几个if,else也是家常便饭,多的时候几十个,而且业务经常新增,看到03年一直被修改过来的代码也是经常的事。

辞职在家进修学习,又想这个问题:请问怎么去除这些if else呢?

个人想法(spring):
1)在spring上下文中配置一个jsp,和controller,和一个action参数
2)在jsp中放置参数,值在第一次访问jsp的时候被spring注入;
3)controller中
a)定义四个接口,对应操作类型:有参数无返回,无参数无返回,有参数有返回,有参数无返回;
public interface Do1 {
Object doing();//无参数有返回
}
public interface Do2 {
void doing();//无返回无参数
}
public interface Do3 {
void doing(Object o);//无返回有参数
}
public interface Do4 {
Object doing(Object o);//有返回有参数
}

b)业务处理类,以action的值命名,实现上面某个接口,controller的内部类实现并存入map对象

c)controller通过map对象管理处理类,并在客户提交的时候根据传过来的action参数反射调用相应的业务处理类。

似乎就是一个状态模式。好处就是每个人需要添加的时候只要在后面添加新的内部类,并把自己加入map就行。

请问怎么去除这些if else呢? 谢谢

  • 写回答

5条回答 默认 最新

  • wanghaolovezlq 2009-04-17 15:00
    关注

    像这种代码可以说可维护性太差
    一定要用多态,这也太多if else了

    可以搞个命令模式,把view,和action封装成一个对象
    class Command{
    String view;
    String action;
    ...
    }

    服务器端controller增加方法可为:
    processRequest(Command c)
    用这个方法处理
    [code="java"]
    if(view.equals("insert")){
    if("insertProjectMes".equals(action)){
    }
    if("insertPictures".equals(action)){
    }
    ...
    }
    else if(view.equals("update")){
    ...
    }
    else if(view.equals("select")){
    ...
    }
    else if(view.equals("delete")){
    ...
    }

    [/code]

    对了,每一个view,action值对都应该有对应的一个类,
    比如:
    InsertProjectMesAction,InsertPicturesAction,后面的同理
    它们实现一个接口Action

    public interface Action
    {
    processAction( 要用到的参数);

    }

    Map map = ....

    controller通过Map map对象管理Action类,并在客户提交的时候根据传过来的每一对view,action参数构建一个Command,然后调用相应的业务处理类。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。