MVC的View在web方式下的技术选择

在Web上,给user做交互的界面通常是利用html的form元素(input, select, radio box, check box, etc), 我在以前一个应用系统中,有很多form,写这些代码会是一个比较繁琐的工作,而且容易出错, 比方说form元素的名字拼写的一个小错误,就导致不能正确的传递参数. 而这些元素的名字通常都会和M层里的Object的属性对应, 和O/R Mapping里面的定义文件的field对应.

以上只是谈了感到View开发不方便的一点, 还有其他的问题,比如数据校验,多语言支持等都是蛮繁琐的劳动. 就不举例说明了.

如果有一种web framework可以帮我们处理这些繁琐的机械劳动, 会轻松很多.

在网络上搜索了一些资料, 没有找到理想的架构, 说一下我的要求, 如果大家有知道类似的架构,请帮忙推荐一下.

1. Form 处理, 用xml定义的方式定义form,form定义可以继承, form元素可以扩展, 这样多个页面可以共用一些form定义. 最好可以根据O/R Mapping的定义文件生成原始的代码供修改.

2. 常用数据校验(长度,数据类型, 正则表达式), 只用写一段定义文件, 客户端和服务器端就都可以支持, 可以通过配置文件来决定disable/enable client or server 模式.

3. 多语言支持, 有一些现成的代码, 但是View上的代码量都蛮多的, 用一堆的jsp tag感觉不是很方便.

4. Template, 支持template 语言 (Velocity, FreeMaker etc).

MVC的view的可选择的技术方案很多。使用html并不是唯一的选择。

单就你提的问题而言,在html的view中,表单的保存、修改以及校验都是可以做到自动化的,关键是你业务规则的指定。如果你可以指定一套规则在V/M中都可以理解,那么,最终你的整个程序就只剩下了一个装配器而已。

此时那些繁琐的view方面的事情就可以避免了。

to:sinio_feng
可不可稍微展开讲一下呢
我在用的时候觉得view中的表单处理最为麻烦,也容易出错,却苦于找不到简化工作量的方法。

quote sinio_feng
>> 单就你提的问题而言,在html的view中,表单的保存、修改以及校验都是可以做到自动化的,关键是你业务规则的指定。如果你可以指定一套规则在V/M中都可以理解,那么,最终你的整个程序就只剩下了一个装配器而已。 <<

有没有什么opensource的framework在做这方面的工作呢?

to wys1978
Struts是你要求的最好选择,除了第一条我有点模糊之外,其他都非常Exactly!

你说的第一条Form在Struts中通过Action来实现了。

> 1. Form 处理,
> 用xml定义的方式定义form,form定义可以继承,
> form元素可以扩展, 这样多个页面可以共用一些form定义.
有XForm阿,应该也有相关的开源工具。
> 最好可以根据O/R
> Mapping的定义文件生成原始的代码供修改.
MVC要分离职责吧,HTML设计者也许不喜欢这么复杂的东西

struts不支持4,webwork可以支持velocity

quote banq
>> Struts是你要求的最好选择,除了第一条我有点模糊之外,其他都非常Exactly! <<
我没有struts的实际项目经验, 但是以前在一个项目前期阶段学习过它,想了解在项目中的可行性, 主要觉得有2个不方便的地方, 没有采用:
1. 业务逻辑通过Action来实现,而Action的execute必须有HttpRequest, HttpResponse的参与, 这样就被限制在了web环境中, 开发的时候debug不方便, QA做完整的unit test不方便, 代码不能被方便重用在其他环境下.

2. Form处理/数据校验通过ActionForm/ValidatorForm处理, 代码量比较大, 如果可以通过简单的定义文件来处理比较理想. 另外好像struts只有服务器端的数据校验, 不知道客户端的数据校验怎么实现?

quote shenli
>> MVC要分离职责吧,HTML设计者也许不喜欢这么复杂的东西 <<
我的意见: form desinger应该是了解代码的人来作比较合适, 因为他比较了解和M层的对应关系, 所以我只要求有方便的处理form的framework, 而不是处理HTML的framework, HTML desinger应该专注于整个页面的layout, style, image等的设计. 你推荐的WebWork是蛮不错的架构, 它的component/WW Form的观念很不错, 准备学习一下,看看能否适合我们的需求. 如果大家有实际的WW的经验,能否交流一下?

我认为struts的运用主要在他的特点:mapping 引导和较强的可配置性(通过xml) 。
至于两个问题: 1。不易调试,我觉得qa该调试的是business bean 。
action 里头的代码不需要复杂的调试,如果太复杂,应该放到独立的bean中。
2。开发数度:是否存在用xml定义来生成actionform,我觉得这个意义不大,一来有高效的开发工具提供的wizard能帮助你摆脱繁琐的getter,setter定义。二来,form 开发成型不会频繁变化,而业务流程却很可能,而这里的管理才是struts的优势。

>1. 业务逻辑通过Action来实现,而Action的execute必须有HttpRequest, HttpResponse的参与, 这样就被限制在了web环境中, 开发的时候debug不方便, QA做完整的unit test不方便, 代码不能被方便重用在其他环境下.

错,君不见execute(..... , ServletRequest request, ServletResponse response)么?另外,HTTP != WEB,SOAP也是基于HTTP的。http是一种文本传输协议,没有限制介质(有线/无线),也没有限制客户端。

>2. Form处理/数据校验通过ActionForm/ValidatorForm处理, 代码量比较大, 如果可以通过简单的定义文件来处理比较理想. 另外好像struts只有服务器端的数据校验, 不知道客户端的数据校验怎么实现?

客户端的校验就是写javascript,或者vbscript。不过我想大家既然学了java,肯定对javascript有亲切感了。struts有validator,可以通过配置将预制的script写到form上。

好久没有来Jdon了,顺便up一下我的老帖子,请大家继续讨论。

Hi,
I have developed few Struts app and also been bothered by the tedious text matching problems. I know a company take the approach of generation, they have a dreamveaver plug-in that can understand the domain business model in XML, web developer can view and pick all or some of the attributes from the XML object and put them in existing html layout and underly the jsp file is been manipulated. I guess the plug-in can also parse the XML for extended information such as type/size validation and generate client script.

Server side validation or other business logic should be enforced in business object, "Action" in struts can be just a facade to POJO, Session Bean, further down to entity bean or DAO etc.

Just my $0.02
-Jevang

你的签名档很有趣~~