论坛首页 Java企业应用论坛

从零开始一步一步做论坛------抛砖引玉,欢迎怕转[四]

浏览 1187 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2011-10-08  

前面说过dao层了,Service层我觉得没啥好说的,现在来说说Action层.

首先讨论一下,基于WebWork的Action类到底该怎么写?每个Action类对应一个bean模型还是每个action类实现一个功能?http://feiyang404.iteye.com/blog/1139012;Action类采用不采用ModelDriven模型?或者是采用FieldDriven?先说说我这个系统吧,这个系统的action类统一继承自BaseAction类,BaseAction类在[三]里面有代码.每个Action类基本和Bean模型对应,没有采用ModelDriven模型,也不是纯FieldDriven,可以说是两者的混合体吧.

先看看代码吧:Permission Model类

 

public class Permission implements Serializable {
	
	private String id;
    private String permissionName;
    private String resource;
    private String action;
    private int typeID;
    private Set roles;
}

 PermissionAction类:

 

 

public class PermissionAction extends BaseAction  implements RequestBasePathAware{

	private List permissionList;
	private PermissionService permissionService;
	private RoleService roleService;
	private Permission model = new Permission();
	private String id;
	private String permissionName;
	private String resource;
	private String actionName;
	private int typeID;
	private PageList pageList;
	private String basePath;
}
 

 

我粘贴的这段代码很简单,可能大家觉得其中的model属性是多余的,但是要类推到一个bean模型有几十个属性的时候而我们的页面又不需要那么多的属性的情况.我们知道ModelDriven模型如果和bean模型对应起来,开发Action层是很方便的,而且Struts2负责填充model变量.但是随着系统的复杂度越来越大,不可能一个Action类只对应一个bean模型,也就是每个Action类里面要操作多个数据库,所以使用了ModelDriven只能拿到一个bean模型,ModelDriven确实在开发单个独立Action类是是很有用的,但是牵扯到多个数据库时,就不行了,要自己声明model模型的变量.如果采用FieldDriven,那也有它的缺点.个人认为FieldDriven比ModelDriven更实用,只是采用FieldDriven的话,Action的变量就太多了,对于很复杂的bean类,就会有很多变量在Action类里面,这其实有点类似Struts1里面的formbean了.所以采用两者结合,对于页面需要的元素,我们就声明出来,不用的就不用声明了,总体声明一个bean的model,模仿ModelDriven里的model.每个Action的方法中也可以用到这个实体模型model.虽然我采用这种方法,但是我认为不是最好的,我也懒得改了.大家看我给的链接,经过我这次开发,觉得还是每个Action类负责一个功能其实是很好的,完全和bean模型不对应了,完全打乱了.比如说bean模型里有一个UserInfo类,对于平时的开发,会有一个UserInfoAction类,里面对应的有reg,login,等得方法,如果采用每个Action实现一个功能,则Action类就是两个了,RegAction和LoginAction,各司其职,页面什么地方用到,就调用什么Action.每个类继承自BaseAction,这样Struts.xml配置文件也很好配置,基本都在代码里面了.这个方法也有个缺点,就是Action类会急剧膨胀.虽然我举得这个例子不是很好,但是还是很有必要将每个Action分开的,我们平时开发login这个方法时很简单,但是其实对于一个完整的系统,login方法很负责的,加上权限判定,你要知道这个login方法时在什么时候需要登录的,登录后要转到什么地方去,是主动登录还是权限拦截了,是用什么身份登录的,登录失败给什么提示,失败转到什么地方等等,都需要做详细判定.我们平时写得login方法估计很容易被黑客拿下(这个咋不懂).对于这个论坛,我虽然没有采用这个办法,但是我接触的系统中有采用这个方法的,仔细琢磨了下,觉得还是很有必要的.

我这一套帖子没有贴多少代码,主要是讨论思想,我觉得在开发中大概有三个月基本对编码就会很熟悉了,主要是思想,没有做不到,只有想不到,所以我很看重软件开发的思想.

就到这里,希望大家一起来讨论如何开发一个好的Action层.

原创首发,谢谢支持!

论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics