日期:2014-05-18  浏览次数:20627 次

struts2的action设计原则
最近在跟着一个视频做OA项目(用ssh做的),可是视频里面用的是struts1,我知道struts1已经被struts2取代的差不多了,差别也挺大的。视频里面struts用一个actionform接收jsp页面属性(这里以用户注册为例),用户的属性有很多个,然后在用一个继承action的类作为控制层。
好像之前学struts2都是把属性的接收,页面跳转都放在一个action,现在这样写,一个action的容量好像很大啊。该怎么办呢?

还有,各位你们action的设计原则是什么呢,是按业务模块吗?还是其他什么的,根据项目大小决定?
struts action 设计

------解决方案--------------------
可大可小,你如果把所有属性对应一个vo或者entity就不会感觉属性多了,根据不同的返回值返回不同的页面很正常呀,习惯就好,还有action一般按功能同类的action放一个命名空间.action类也可根据功能放在相应的包中,这样好管理.当然还是看公司及个人习惯.
------解决方案--------------------
我们的设计都是有一个VO层:值对象
如下:ActionForm类
package com.davis.registration.vo;
public class ActionForm {
  private String username;
  private String password;
  private String password2;
  
  getters and setters.......
}

Action类:
@Component("user")
@Scope("prototype")
public class UserAction extends ActionSupport implements ModelDriven{
    private ActionForm userForm = new ActionForm();
      @Override
      public Object getModel() {
 return userForm;
      }
.........
}
------解决方案--------------------
1、在中型以上的项目:vo层肯定是必须的呀,
   (1)、比如说form提交的属性有30个,而我们的相关的anction只用到了其中的username,password,
          这两个是要存到数据库中,你觉得action要建30个接收字段,建相关的getters、setters吗
          这就是严重的不匹配,我们的model层比如说是user,就只有username,password,那password2
          放到user里面肯定不合适
   (2)、你比如说,从数据库中select数据出来,N多的字段,难道全都接收到action里面吗,你认为该怎
          么办,当然是要用哪个采用哪个。
2、关于你说的password2是否传到后台进行接受验证,你还是没弄明白。
   vo层的ActionForm类是接收form表单提交的数据的,不是model层的,当你需要时,ActionForm里
   相应的数据,赋值到model层里的实体对象里:
   如果你们的验证需要的话可以把这个做到服务器端
------解决方案--------------------
Actionfrom负责接收form表单提交的说有数据,
实体类:model层的实体对象用到哪些数据,就在Actionform里面取就是了。

这种设计思路很经典:就好像你有10万块钱,你想买个面包,你不会拿着10万块钱去买面包吧,
你顶多就拿个几百块去,是不是。

现在能理解了吗,vo层还是多余的吗。
------解决方案--------------------
model层提取vo中接受的数据,然后放到action中去处理。action一般可以按业务分类。