InstantMVC是我最近开发的一个j2ee轻量级MVC框架,写这个框架前刚好做完一个webwork+spring+InstantORM的项
目,对于开发过程中的一些不舒服的地方,就像要改进着试试写一个框架,于是就开始写了,写这个框架的冲动主要有以下几点:
1.讨厌的action配置,无论是strtus还是webwork,都有一大堆的action配置文件,strtus加上bean就更多,如果
webwork配合spring,那么一个action就要配置一个spring Bean,一个webwork
action映射,随着项目的扩大,后来实在是让人有些受不了,再则,随着项目的扩大,action数目的增加,每次改动重新启动服务器的时间浪费就更
大,所以项目越来越大,感觉越来越痛苦,虽然配置型的action,对于项目的移植有一定的好处,但是一般的项目是很少回过头去修改action映射,就
算修改,在java文件中修改也是可以接受的。
2.关于验证,struts和webwork的验证都是基于xml配置的,就我个人而言,是比较讨厌xml配置这个东西的,所以我一直用不惯他们的验证框
架,而且一旦用到验证框架,必须用到UI组件,在webwork中用freemarker作为模板的时候,UI组件是比较费资源的(可能成为潜在的性能瓶
颈),如果有一个不用UI组件而且外面封装客户端和服务器端验证的MVC框架,我想会比较爽。
3.关于view,我比较喜欢springMVC中的那种直接在action中return的形式,webwork和struts的配置方式我也很不喜欢。
4.应该是性能考虑,webwork的action非单利可能导致性能问题(虽然没有被充分证明),struts2也走了这条路。
基于这些考虑,我打算开发自己的MVC框架,而且现在已经小有所成,基本功能已经完成,下面简单讲下InstantMVC框架的主要特征
1.零配置,零配置不是说没有配置,而是说不用配置action和result view,整个mvc框架只有一个整体的配置文件,所有映射关系都是通过默认规则来建立的。
2.类似action/form
形式,这里说是类似,因为InstantMVC可以配置让get方法是否支持form,也就是get方法可以不用form,直接通过一个Map获得请求参
数,也可以配置get填充form形式,InstantMVC的action可以配置为是单利或者非单利,不过一般在action中不推荐存放非线程安全
的变量,所以建议配置为单利。
3.action中两个参数一个是Form的Object,一个是Map,容易单元测试,不需要引入Servlet部件,但是对于一些session等操
作可以通过InstantContext获得HttpSerlvetrequest操作,可以说InstantMVC对于容器无关性是介于webwork
和struts之间的。
4.最简单的验证集成方式,所有验证代码写到action中,在view中不用配置UI组件,支持客户端和服务器端双重验证,可以单独开启一方关闭一方。
5.ajax
View的集成,这里的集成不像dwr那样完全集成,而是一种半集成方式,客户端用到ajax框架还是需要用户自己选择,这样提供了很大的灵活性。
InstantMVC的View有好几种形式,比如挑战到另一个action的view,直接返回的view,ajax的view等,
InstantMVC的ajax是和普通的action一样的,只不过返回一个ajax的View就成了ajax了。ajax的view可以返回任何对象
的json。在客户端很方便的获得,这一点有点像dwr的返回结果,不过dwr需要配置,InstantMVC不用。而且我们可以设置开启ajax的安全
验证,开启后将不允许其他域方法ajax的action。
6.支持AOP拦截器,模仿webwork那样,可以自定义拦截器。
7.集成了上传组件,和验证一样,可以在action中配置。
大概就是这些特性,这些特性都很让我着迷。现在这些特性基本上都能工作,不过稳定性兼容性方面还有待提升,同时还需要大量的性能方面考虑(虽然现在的性能比其他MVC只会高不会低)。今天刚把blog搬到这里来,以后这里会主要写关于我的框架的一些问题等。
--InstantMVC:j2ee轻量级mvc框架