如题,最近突然觉得Action中的方法重用性不好,除非增加请求参数作为判断依据。这种方式弄得Action这一层感觉有点乱糟糟的。故,想出另外一种实现方法。就是一个操作对应的方法(Action中的)负责该操作的所有步骤(例如修改权限,我先查询当前权限,再查询权限列表),这些步骤均通过一个请求参数作为区分(例如:dispatcher="current")。这种方法自己从没有用过,所有想上来看看各位高手有什么见解。个人感觉这种方式虽然存在了重复编码的情况(把方法的重用性划分到了Service层),但是对于Action和请求来说,这样既简化了请求转发的次数,同时也降低了请求逻辑的复杂程度。不知道这种方式是否可行?希望给点提示,怕就怕这样的定义方法不能适应变化的业务问题(自己想出的结果是没问题,相反,如果采用这种方式,在业务发生更改时还更容易修改。)。

解决方案 »

  1.   

    fuck!CSDN可以重复提交啊。浪费我100。请回答这个帖子的朋友也回答那个,双倍哦。心痛ING....
      

  2.   

    不会啊,Action和struts.xml代码看看
      

  3.   

    看了后好像理解了一些.
    action --> Server --> dao如果server层的东西写到 action 里自然觉的action的重用性不好.
    action接受一个请求,接到请求后如何处理,也是看server层里的方法写的如何.通俗来讲, action接受的请求也就为增删改查.
    拿LZ的例子讲例如修改权限,我先查询当前权限,再查询权限列表加上修改权限这个动作
    dao层肯定有三个方法.那么server层呢?
    主要是server层的设计.
    action只是调用,不应该是复用action,而是复用server的方法.
      

  4.   

    action -->service --> dao -->db
    action中的方法主要负责调用service中的方法,service调用dao
    而对数据库的操作,都是写在dao里面的
    个人觉得struts2中action很好用,用多了之后,绝对不会再想写servlet了
      

  5.   

    哥们,你忽略了一点。那就是修改权限的整个动作并不是连续执行的。这也注定了Service层只能是原子性的操作。这个很尴尬,弄得貌似Action层也只能写成原子性操作了。根本就无法组合(还是我没想到的结果?)。
      

  6.   

    Action为了重用性好,就是保证其抽象度高,普遍的应用都会用到。
      

  7.   

    没明白楼主意思? 你在action层想重用什么方法?
      

  8.   

    我准备这样使用Actionpublic class PowerAction{
      private String dispatcher = null;
      //dispatcher的getter、stter方法....
      public String add(){
       String forward = null;
       //查询权限列表(将用作父权限)的代码...
       forward = "...";
       return forward;
      }
      public String del(){
         String forward = null;
         //删除当前权限的代码....
         forward = "...";
         return forward;
      }
      public String upd(){
         String forward = null;
         if(forward.equals("crrent")){
            //查询被修改的权限的信息的代码...
          forward = "...";
         }
         return forward;
      }
      public String qry(){
         String forward = null;
         if(dispatcher.equals("all")){
            //查询列表的代码
             forward ="...";
         }
         return forward;
      }
    }权限模块中的添、删、改、查操作就直接对应这几个方法。
      

  9.   

    我觉得这样不太好
    如果你通过参数来区分,用到if else,不太利于扩展
    比如你增加一个操作,那可能会影响到前面的判断很多重用性高的操作你可以交给拦截器,这是STRUTS的核心
    比如你说的修改权限,如果你的权限控制在拦截器都处理好了,在ACTION里面只需要查询权限列表就可以,而就不需要考虑当前权限,因为拦截器都帮你处理了。