前面说过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层.
原创首发,谢谢支持!
分享到:
相关推荐
在“空中鼠标控制——抛砖引玉”这个项目中,核心是利用双目摄像头来获取用户的手部或任何指定物体的三维空间坐标。双目摄像头,顾名思义,是由两个摄像头组成,通过三角测量原理来计算物体与摄像头之间的距离。它的...
算法优化抛砖引玉-主要是一些算法的实现
【房地产兵法论专集之二十-抛砖引玉】这篇文档虽然以古代战争中的兵法故事开场,但实质上是探讨房地产市场的策略和现象。"抛砖引玉"原指用普通物品吸引更高价值的物品,文中以此比喻房地产市场中高价房产的价值与其...
这份"抛砖引玉熊市主图"文档提供的源码,就是一个实例,展示了如何通过计算和分析价格、成交量等数据来评估市场的牛熊状态。 首先,公式中的"SW1"是一个短期和长期移动平均线的综合指标,它是5日指数移动平均线...
从提供的文件内容中,我们可以梳理出以下几个关于监控和运维的重要知识点: 1. 理想监控系统的五个关键特性: - 完善的管理系统:能够一目了然地展现系统状态,帮助运维人员快速定位问题。 - 强大的配置系统:...
这是梦幻西游使用的was文件的查看工具,在编写时看了不少WasTools的代码,终于对was文件有个初步的了解了,在查看挑选图片时比原作者云风的waskey方便一点,但运行时间一长就会冒出个Out of system resource的错误,...
从零开始深度学习:TinyMind汉字书法识别 操作步骤 从官网下载,并解压到当前文件夹。产生train test1 两个文件 运行data.py文件,进行转录,将原始数据集转录为numpy矩阵,生成data.npy及label.npy 运行train.py...
#### 四、输入数据 ##### 4.1 读取原始数据 SAS支持多种数据格式,包括CSV、Excel等。 - **INFILE语句**: 用于指定文件的位置和格式。 - **INPUT语句**: 用于读取文件中的数据。 ##### 4.2 输入格式 - **格式化**:...
1.拷贝CANBus文件夹到D:\WINCE600\PLATFORM\SMDK6410\SRC\DRIVERS 目录下 2.在dirs文件中添加CANBus ...注意:驱动中默认波特率为100K,本源码只是个抛砖引玉的作用。可以根据项目实际情况加以修改。
针对开关电源很多人觉得很难,其实不然。设计一款开关电源并不难,难就难在做精,等你真正入门了,积累一定的经验,再采用分立的结构进行设计就...万事开头难,笔者在这就抛砖引玉,慢慢讲解如何一步一步设计开关电源。
此资源为抛砖引玉,仅为赶时间速成的同学提供完整的项目案例。 ------------------------------------------------------------- 执行项目需要提前安装好python环境(anaconda、pycharm)以及selenium依赖包(pip ...
WPF是微软新一代图形系统,运行在.NET Framework 3.0架构下,为用户界面、2D/3D 图形、文档和媒体提供了统一的描述和操作方法。基于DirectX 9/10技术的WPF不仅带来了前所未有的3D界面,而且其图形向量渲染引擎也大大...
一位有心人写得很好的SAS基础知识介绍,值得一读。 前 言 --不要把学SAS 当作一件很时髦的事情,能用简单软件完成...而不是刚会走就想着跑甚至想飞,还没学几条语句就想去做统计分析,到头来发现错误百出而又手足无措
SAS语言抛砖引玉》 任何想学习和了解SAS语言的人,学习SAS的好材料,确实很有用。
《CactiForWindows安装手册(抛砖引玉版)》是一份由网络管理员编写的文档,旨在为那些不太熟悉网络监控(MAP)的新手提供安装指导。这份手册详细介绍了如何在Windows环境下搭建并配置Cacti监控系统,包括所需软件的...
小弟不才,斗胆写下几行代码,来这里期待抛砖引玉。我们身边,每天都有无数的项目开工,然后是老板对进度的紧追不舍,项目经理程序员加班的无奈,再然后或许是成功的喜悦或许是失败的哀愁,但不管结果如何,所有人...
小弟不才,斗胆写下几行代码,来这里期待抛砖引玉。 我们身边,每天都有无数的项目开工,然后是老板对进度的紧追不舍,项目经理程序员加班的无奈,再然后或许是成功的喜悦或许是失败的哀愁,但不管结果如何,所有...
抛砖引玉:一种改善微信云开发 , 开发者体验的思路 本篇文章写于 2021-02-27 鄙人才疏学浅,如有谬误,欢迎指正 更多代码的细节在 中 前言 小程序云开发,作为一种 BaaS 场景,在过去的一段时间内发展非常的迅猛。 ...