`

论struts的ActionForm

阅读更多

  Struts老了,在这个web框架泛滥的年代里,他开始越来越不被人关注了,追溯起来他的历史要比我当程序员的历史还要远上一年半载。我走到现在,也完全是依赖于对他的一知半解才没有被IT的潮流所淘汰。但现在,他老了,他正在淡出历史的舞台。在他身后,JSF,Tapestry,WebWork等等一批新生代web框架都在对他虎视眈眈,另一方面他又受到Asp.net,ROR,Django等其他语言框架的围堵,用苟延残喘来形容Struts的现状,应该不为过。

  在这个时候,对,在这个市场份额激烈争抢的时候,Struts当然不会坐以待毙,2.0的推出又让众多Struts粉丝们对其报以众望。事实是什么呢,事实仅仅是Struts合并WebWork后,在其基础上推出的一个产品,我不同意Struts2.0与Struts1.X是完全两个不同产品的这一观点,这不仅仅是因为他完全兼容1.x,而且在于他的编程理念事实上和1.x是一致的,只不过换了一个实现手段而已。当然,从1.3升级到2.0,其中Struts自己的新技术寥寥无几,核心机能都是WebWork的,从另一方面看,Struts这层皮是多么的值钱,也是可想而知的。

  说到这,该往题目上靠一下了,ActionForm是什么?他是画面数据的载体,他是MVC中的M,他是javabean,他是值对象VO。我们为什么要使用它,因为我们要将页面的数据传到后台,也就是从表示层传到逻辑层。ok,我们现在知道了ActionForm也知道了ActionForm是干什么用的,那么我要告诉你,ActionForm正在被广大java应用框架们所抛弃,WebWork没这个概念,JSF没这个概念,ASP.net之类的就跟没这个东西了。而现在,Struts2.0也将它扔掉了。大多数人津津乐道于将pojo直接传递到画面,因为这会节省很多coding time,也提高了编程效率。当然我也很乐意省掉那些将VO与POJO倒来倒去的那些麻烦的事情。Struts2为每一个请求产生一个Action实例,这使得在Action中便可以定义画面上的众多属性,所以他抛弃ActionForm也是理所应当。

  但是,我想说的是,Struts将ActionForm类取消这没有问题,但是千万不能将ActionForm这个概念所抛弃。

  首先,从颗粒度这个角度来说,从Struts诞生之日起,他就不是一个颗粒度特别细的一个框架,他不能像JSF那样将眼光放在画面项目上,而是着眼于整个画面来考虑问题,那么一个画面的值对应到一个VO,那他就是ActionForm,从这个方面来说,颗粒度定位于整个画面的框架,他都应该有一个ActionForm的概念。那么我们在实际的应用框架搭建中,就应该注意这个问题。

  其次,将POJO即DTO直接与画面绑定不利于大规模开发,这个问题在JSF等UI框架中也比较突出。我们要回忆一下MVC的原则,就是要为项目分层,为程序员分工,这在一个大型项目中尤为重要,这样做可以极大的提高开发效率。我希望我的开发人员都是产品流水线上的一环而已,他们只需关注与自身业务相关的工作,即扭螺丝或者是焊牢一根二极管,表现在实际项目里,就是做UI的人不需要去关注DB,作DB的人不用操心画面的实现,他们各自负责看管自己的对象。

  第三,在Action定义中多属性,那么没人喜欢去读这样一个乱哄哄的文件。我们将ActionForm里的属性都取出来,然后将他们都放进了Action或UI,然后还要在这些文件中写入一些动作方法,如果画面的项目少一点你还能够忍受,如果多了一点呢?我认为这不是一个优雅的办法。我宁愿去看两个功能突出的类,也不愿去看一个混乱无章的东西。

  最后,关于入力项目的校验。WebWork的那一套配置属性文件式校验的确很精彩,但那仅仅是对于简单的入力项目而言,遇到比较麻烦的校验还是需要在Action中进行,既然如此,那还不如在Form里的Validate方法中进行来的实在。

  基于以上观点,我始终是ActionForm这个概念的拥簇。ActionForm对于Struts来说,确实需要变化,应该让他变得更强大,而不是去把它去掉来达到一了百了的效果。一方面我们可以让他变得更动态一些,一方面我们可以简化getset方法,另一方面还可以加强其对内部对象的操作。而从更深层次来说,我是一个multilayer主义者,我更重视的是整个项目的开发效率。

  众多框架孰优孰劣其实并不重要,重要的是他是否适合我们自己的项目,是否能提高我们的生产力,而不是炫耀那些时髦的技术。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/smlweb/archive/2007/08/28/1762163.aspx


   近来在网上看到这样一篇文章,引起了我极大地共鸣,我个人认为自复杂表单应用领域ActionForm的确应有其存在的价值,因为我们不可能吧VO一棒子打死!ActionForm的概念应该被熟记,并且在复杂应用的领域应该再次使用,这样会让我们的项目更清晰!否则你仍然需要自己设计出一个VO来进行复杂性转换!所以本质上讲struts1和struts2 ActionForm的态度就是一种强制性加给和一种人性化定制的改进!

 

分享到:
评论

相关推荐

    收集的几篇论文关于STRUTS

    1. **Struts架构**:Struts的核心架构包括Action、ActionForm、ActionServlet、配置文件和JSP等组件。Action是处理用户请求的业务逻辑组件,ActionForm则用于封装表单数据。ActionServlet作为控制器,负责调度请求和...

    基于Struts框架的网上书店毕业论文

    1. **Struts框架基础**:首先,论文可能会介绍Struts的基本架构,包括Action、ActionForm、ActionServlet、配置文件(struts-config.xml)等核心组件的作用和交互方式。 2. **MVC设计模式**:解释MVC模式如何将业务...

    毕业设计论文,基于struts框架的网上书店系统

    2. Struts框架:深入学习Struts的配置文件、Action类、ActionForm、拦截器(Interceptor)以及视图解析等核心概念。 3. SQL与数据库设计:设计数据库表结构,编写SQL语句进行数据操作,如增删改查。 4. 用户认证与...

    深入Struts 1.1

    论Struts 1.1框架的关键特性及其在Model 2架构中的作用。 Struts 1.1是一个基于Model 2的MVC框架,它旨在解决Web应用开发中的问题,特别是HTTP协议无状态性的挑战。Model 2架构是MVC模式的一个变种,专门针对Web...

    基于Struts开发的网上银行

    - **struts-config.xml**:这是Struts的核心配置文件,用于定义Action、ActionForm、Forward等元素,它将URL映射到特定的Action,规定了请求处理的流程。 - **web.xml**:Web应用的部署描述符,用于配置过滤器和...

    毕业设计论文-IT计算机-[其他类别]Struts+Hibernate实现MVC_strutsmvc-源码.zip

    Struts和Hibernate是Java开发中常用的两个开源框架,它们在构建MVC(Model-View-Controller)架构的应用程序中发挥着关键作用。本毕业设计论文的主题是利用Struts和Hibernate来实现MVC模式,旨在展示如何整合这两个...

    毕业设计论文-IT计算机-[信息办公]Struts图书馆管理系统_struts-源码.zip

    在这个图书馆管理系统中,可能包含如图书添加、修改、删除、查询等模块,这些功能的实现都离不开Struts的核心组件,如Action类、ActionForm、配置文件struts-config.xml等。 Action类是Struts的核心,它接收来自...

    OA办公自动化管理系统(Struts1.2+Hibernate3.0+Spring2+DWR).rar

    开发者可以使用ActionForm对象来处理用户请求,并通过配置文件定义请求到Action的映射。 2. **Hibernate3.0**:Hibernate是一个强大的ORM(对象关系映射)框架,允许开发人员使用面向对象的方式处理数据库操作。在...

    基于JSP与Struts1的新闻发布系统的设计与实现

    这些组件通常在Struts1的ActionForm中定义,通过Action类处理业务逻辑并控制流程。 3. **数据访问对象(DAO)**:DAO负责与数据库的交互,执行CRUD(创建、读取、更新、删除)操作。它隔离了业务逻辑层与数据存储的...

    基于Struts+Ajax的学位论文管理与服务系统的设计和实现

    Struts的核心组件包括ActionServlet、ActionForm、Action和ActionForward。 2. **Ajax技术**:Ajax(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。它通过在...

    毕业设计论文-IT计算机-[新闻文章]Struts新闻管理系统学习修正版_newsmanager-源码.zip

    1. **Struts框架详解**:介绍Struts的基本结构、工作原理以及如何集成到Web项目中,包括ActionForm、Action、ActionServlet、配置文件等关键组件的作用。 2. **MVC设计模式**:解释MVC模式在Web开发中的作用,如何...

    网上书城系统(Struts+Hibernate+Mysql).rar

    Struts通过Action和ActionForm类实现了业务逻辑和视图的解耦,使得代码更易于维护和扩展。 Hibernate,则是一个对象关系映射(ORM)框架,它简化了Java应用程序与数据库之间的交互。在Hibernate中,开发者可以使用...

    Struts

    ActionForm Bean用于在模型和视图间传递数据,系统状态Bean代表应用程序的实际状态。这些Bean的使用确保了数据的一致性和可重用性,同时模型组件应保持与视图和控制器的独立性,以增强系统的可维护性、可扩展性。 ...

    人力资源管理系统 一篇不错的毕业论文啊!是基于Struts的!

    论文可能详细阐述了如何利用Struts的配置文件(struts-config.xml)来定义各个Action及其对应的处理方法,以及如何设置ActionForm来接收和验证表单数据。此外,Struts的国际化和异常处理机制也可能在系统中得到了应用...

    毕业设计论文-IT计算机-[新闻文章]Struts文章系统_strutsarticle_release-源码.zip

    1. **模型(Model)**:在Struts中,模型通常由JavaBeans或ActionForm对象实现,负责处理业务逻辑。在这个新闻文章系统中,可能会有Article类来代表文章实体,包含文章标题、内容、作者、发布日期等属性,并提供相应...

    Struts 数据库项目开发宝典

    Struts框架是Java Web开发中的一个经典模型-视图-控制器(MVC)框架,它在构建企业级应用中...同时,随着技术的发展,如Spring Boot、Spring MVC等新兴框架逐渐成为主流,但Struts的基本理念和方法论依然具有指导意义。

Global site tag (gtag.js) - Google Analytics