小雨开源

我也加入到了开源队伍中了

常用链接

统计

最新评论

创造中国神话的MVC框架如何改变Web

  他们说:“Web改变世界,我们改变Web”,你知道是谁改变了谁吗?

  他们说:“From the earth to the moon, and ready for Mars!”,你ready for what呢?

  他们勇敢,他们开放,他们懂得分享,所以他们选择开源,并且可以自豪地宣布,他们活在“勇敢者的新世界”里。而同样作为程序员的你,你的世界又是什么样的呢?

  这里的“他们”,我想我不提大家已经知道是谁,就是来自中国的开源项目operamasks。他们虽然没有创造世界神话(不知道第四个通过JavaEE5认证的服务器算不算),但他们确实创造了中国神话,如果你不服,那么你能举出一个在他们领域里面比他们成功的同类产品吗? 

  成功者都常说,“细节决定成败”,只有为用户考虑到各种细节,用户才会支持你。Operamasks的成功,我觉得除了他们的“勇敢”以外,还有一个重要因素是“细节”,他们考虑到了很多细节,很多都是在JSF这样一个“标准”层面的东西无法强制规定死,但往往对用户来说又是非常实用的细节,还有解决了很多常遇到的繁琐细节。

  道理及感叹在这里就不想多发了,我想大家都关注的是具体的技术,所以本文就简单例举一下operamasks中的一些比较具有人性及亲和力的细节,看了后我想使用JSF开发的你一定很觉得非常体贴。
 

  1、 Kill掉JSF中令人讨厌的配置

  一个简单类似的注册示例,成功就导航到/accepted.jsp去,而拒绝就导航到/accepted.jsp。

ManagedBean中

 
public String signup() {

    
if (Math.random() < 0.2) {

      
return "accepted";

    } 
else {

      
return "rejected";

    }

  }


  让标准JSF来干吧,只是为了一个简单的跳转,你就需要配置下面这样一堆html,你估算一个项目下来的配置文件代码是多少。

<faces-config>

  
<navigation-rule>

    
<from-view-id>/signup.jsp</from-view-id>

    
<navigation-case>

      
<from-outcome>accepted</from-outcome>

      
<to-view-id>/WEB-INF/results/accepted.jsp</to-view-id>

    
</navigation-case>

    
<navigation-case>

      
<from-outcome>rejected</from-outcome>

      
<to-view-id>/WEB-INF/results/rejected.jsp</to-view-id>

    
</navigation-case>

  
</navigation-rule>

</faces-config>


  而用operamasks,你的代码只需要写成下面这样即可:

 
public String signup() {

    
if (Math.random() < 0.2) {

      
return "/WEB-INF/results/rejected.jsp ";

    } 
else {

      
return "/WEB-INF/results/accepted.jsp ";

    }

  }


  也就是说operamasks帮你吞掉了这些无味又没有太多营养的配置文件,并帮你消化,你说他是不是很人性。 

  另外,比如我们想要用到一个ManagedBean,标准JSF需要在配置文件中写一堆的配置文件,如下:

<faces-config>

  
<managed-bean>

    
<managed-bean-name>myBean</managed-bean-name>

    
<managed-bean-class>

      package.MyBean

    
</managed-bean-class>

    
<managed-bean-scope>request</managed-bean-scope>

  
</managed-bean>

</faces-config>



  而operamasks设计了一套注解annotation标签,你只需要在类的声明前加上一个@ManagedBean标签即可,如下:

@ManagedBean(name="myBean", scope=ManagedBeanScope.REQUEST)

public class MyBean {

}


  类似这样的细节还有很多,让我们慢慢去发掘吧。

 

2、用Ajax是那样方便

  不管你信不信,事实摆在那里他真的很方便,Ajax的无刷新的效果对于Web应用来说确实很酷也很铉。对于传统的JSF实现,要想用Ajax你就要借助其它的一些Ajax框架,名字大一点算是ajax4jsf吧。下面看一个动态刷新页面中id为msg处的内容的示例:

  首先要定义一个JSF标签

      
<h:outputText id="msg" value="#{bean.text}" />
  

  然后定义一个ajax2jsf的按钮标签:

<a4j:commandButton reRender="msg" value="Submit"/>


  而operamasks中的按钮标签仍然是:

<h:commandButton value="Server Submit" />


  不懂JSF的同仁一定都觉得怪,得懂行的就知道。这个<h:commandButton value="Server Submit" />可是在JSF的JCP中规定的标签标准啊,这个是任何支持JSF的开发工具都能认识的,当然程序员就不用说了。而那个什么<a4j:commandButton>是什么,那个reRender属性,更是怪怪的,鬼二哥Studio才会认他。


3、Rich Components的集成

  看过Operamasks有名的jsfdemo示例吧,我们来看看反应。一些菜鸟感叹说:“发漂亮啊,太伟大了!”;一些小牛们会眼红红地生闷气,怎么我才想到的你就做出来了;一些大牛们会说:“这不是偷人家ext的吗?”,幽默一点会说:“我认为是是进到了extjs.com”;还有一些很有尊严并非常爱国的人会说:“真丢无耻,真丢中国人的脸,把别人的东西改改就说成自己的了,真贱……*&^&^%%^&8…”。

  上面的种种反应应该归纳为中国开源的特色悲喜剧。这里我想说的是,如果你真正花一点时间去了解一下Operamasks、了解一下Ext、了解一下Rich Components,那么所有你就不会成为上面悲喜剧中主角。

  我们知道Java跟Web式的Rich Components也无法,跟Ajax也无关。Ext专用于Web式的Rich Components,但对于企业级的应用来说,他是解决了很小的一部分问题,而且单独使用Ext要写很多很多的跟很酷的Ajax效果一样很酷又很让人头晕的Javascript。那么该如何解决这问题呢?很明显,只有大家合作。Operamasks也就通过集成同样是开源的Ext项目来实现了丰富的Rich Components,你可以像开发Delphi或VB那样,直接往界面上拖出一棵非常实用的树出来。Rich Components的集成中有很多细节及技巧,本文就不例出。
 

  其实细节还存在很多地方,比如多国语言中的小标签,注入Spring中的Bean,由于研究Operamask的时间比较短,而且资料也比较少(哪位朋友如果有好的资料或示例方便的话请发一些给我学习),所以暂时就写这些,以后会逐渐以大家分享。 

后记:

  虽然才开始投身开源的世界,但发现这个纯技术的世界并不是想象中的那么单纯。我上一篇写过《中国java开源界最可爱的人们》一文,从一些同仁们的回复看出大家对中国的开源(包括项目、环境、产品、人品)仍然很悲观,甚至还存在一些心理阴暗的人,篇造出什么“软件界的洪志 lee”之类的大词,也许就恐天下不乱吧。

posted on 2007-12-14 09:20 小雨开源 阅读(2235) 评论(19)  编辑  收藏

评论

# re: 创造中国神话的MVC框架如何改变Web[未登录] 2007-12-14 09:29 无名

也就是说operamasks帮你吞掉了这些无味又没有太多营养的配置文件,并帮你消化,你说他是不是很人性。

=====================================================

建议你好好学习一下为什么会有配置文件的出现

如果view的路径变了,是 recompile 方便呢还是改变一下配置文件方便呢  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 09:33 小雨开源

@无名

兄台注意看我的这一句:“吞掉了这些无味又没有太多营养的配置文件”,“没有太多营养”并不是“完全没有营养”。所以如果在你说的那种情况配置文件是有营养价值的。但是80%的情况下,我们总不会没事总去掉一个已经事先定好的配置文件的文件名或路径吧。注意这里说的是80%,不是100%。  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 10:46 隔叶黄莺

return "/WEB-INF/results/accepted.jsp ";

写在代码里其实对页面流的理解极不利的

这要去批评 struts/webwork/spring mvc 的做法都是有问题的,或者说不符合中国人的习惯?  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 10:59 guest

@小雨开源
想省事干脆去用Rails,何必用那个四不像的operamasks  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 11:30 小雨开源

@guest
Rails也就是考虑了这些细节,所以才不错。但不论如何,他跟JavaEE不是一个级别的!  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 11:48 guest

@小雨开源
呵呵,对啊,Operamasks这样肆意乱改(或者叫践踏)JSF到时也会跟JavaEE不在一个级别的。  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web[未登录] 2007-12-14 15:11 小雨开源

@guest
知道EJB3与EJB2的区别吗?:-)  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 15:19 guest2

@小雨开源

你知道spring2与spring1的区别吗?
你知道java与php的区别吗?
  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 15:21 guest3

@小雨开源
你知道annotation与XML的区别吗?
  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 16:14 小雨开源

@guest,guest2,guest3

  拜托,不要跑题,OK。请你首先要有一点常识,你也就不会闹“样肆意乱改(或者叫践踏)”的笑话,首先operamasks是一个JSF的实现,JSF规范里面制订了的,他都实现了,他再牛还不能牛到随便改标准的地步,又何来践踏呢?如果只是因为多了一些实用功能支持,就叫践踏的话,那么JPA又怎么可能出来呢?众多的JPA实现中,也增加了很多自己的一些特色功能,你能说别人在践踏JPA吗。
  好不好用,要以事实为基础,我想楼上的应该没有用过JSF吧,知道JSF怎么用吗?知道JSF与Struts2的区别吗?如果你没有用过,又怎么知道这些细节上的改进,不是用户所需要的呢?  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 16:53 mic

性能是核心 解决问题是关键 包装来包装去的干啥呀 拷的烦事(code fans)们当下流行祼睡 哈哈哈  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 17:18 gr8vyguy

又见标题党  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 17:56 我来也

卖拐的,忽悠继续忽悠~~  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 21:14 kk

Web应用真的需要MVC吗?不要以为这是一个蠢问题,社区里已经有很多针对这个问题的讨论,甚至有人说MVC已死(http://blog.jeffhaynie.us/mvc_is_dead.html),这里说的MVC指的是那种以服务器为中心得web架构,比较常见的是struts之类的框架,从根本上讲jsf也是基于MVC的框架(虽然说不只是MVC)。在Ajax出现之前,浏览器的功能基本上只是显示页面,从业务逻辑到UI渲染都是服务器的责任,mvc在这时候是理所当然最好的解决方案。
但是web的世界已经开始步入2.0的时代,基于Ajax,Widget,REST等等技术的web开发模式也逐渐被越来越多人采用,比起传统的MVC模式来说,它们之间的区别在于,浏览器的能力得到了开发,相当一部分服务器的转移到了浏览器端,随之而来的是view的前移,controller的前移,服务器逐渐退化为无状态的服务和数据提供者,在这种情形下我们还需要复杂的struts, jsf之类的mvc框架来开发web应用吗?
我对openmask不是很了解,但是基于jsf的框架是否符合web开发发展趋势是非常值得我们思考。是改变了web,还是被web淘汰?  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-14 23:22 hejianhuacn

无论是JSF还是Asp.Net它们都是 页面型MVC的代表:丰富的组件库,会为我们的节省不少的开发时间,而且也能在一定程度上对代码风格作出统一。都是为了简化开发,增加开发速度,当我们连HelloWorld都写不 出来,或者说写不好的时候,去考虑整个框架的扩展性我不知道有没有必要。当然,对大牛级的人我觉得设计东西的时候自然会考虑扩展性的,其实他们就是不考虑在举手投足之间还是会流露出来,因为经验就是为了让自己活得更好、更舒坦,所以没人会愿意自己的日程安排被打乱,大牛们就更不愿意了。但人总有成长阶段,一开始如果能够写足够多的JSP或Servlet代码绝对不是坏事,经验都是建立在痛苦之上的,为什么有这么多框架出来?就是因为大家被折腾得不行了,然后就有受不了的大牛们站出来!所以某个时候某样东东的出现都是有他的道理的,JSF那么牛他还不是建立在Servlet的基础上的嘛。楼上兄弟的Web2.0 观点真的有点让人心惊,让我想起公司的那些出去忽悠的高层们,我觉得Web2.0 应该是一种整体架构,一种新的用户体验,而不是说展现和交互方式由什么来实现,这不是重点。就像重构所推崇的一些原则,兄弟如果你觉得自己心里对业务模型足够的有数的话,开始写代码吧,然后在适当的时候进行代码的重构可能会更好。我们要记住所谓JSP、JSF、ASP.Net、PHP它们都只是“翻译引擎”,把代码翻译成HTML或是浏览器能够理解的一些语法规则而已包括JavaScript在内的脚本语言都是这些规则的一部分,所有的封装都是为了更快的实现需求,让开发费用更低,至于有没有考虑会不会让程序员抓狂,就不得而知,所以看开一些吧^_^  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2007-12-26 19:40 回复

金蝶的东西要慎用啊,吃人不吐骨头的主  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2008-02-20 14:13 范连洲

@无名
同意你的看法(写程序时间不少了,不过返回这些东西,感觉很奇怪),那东西写在程序里让人看得头晕眼花,如果结构复杂,可能会出现
return "/WEB-INF/results/accepted.jsp ";
一大片。并且编译好后无处查看网站流转过程。  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web 2008-02-24 02:53 张旭

现在才看到这篇文章,充分的说明了我不够关注外面的世界,每个人发表的见解会因为对技术的理解、经历、知识体系各方面相关,但是每个人都有权利发表自己的看法,所以我尽可能客观的发表我个人的感受和看法。
@无名
关于“配置文件还是annotation”的问题,这是一个系统设计的模式的问题,二者之间需要有一个平衡,将不易变或用户不可控元信息存储在annotation中,将易变的和用户可参与的元信息存储在配置文件中。
基于JDK1.5的大多数平台级的框架都提供对二者的并行支持,使用配置文件还是annotation完全是由使用者设计决定,平台并不关心,只提供支持,这可以处理大部分实际应用场景。
@guest,guest2,guest3
你们所发表的见解,客观说,我觉得我无法评论。
@kk
我个人觉得无需讨论概念及趋势,我选择在实践中感受和体会。
@回复
我个人觉得不论发表什么内容,都希望能够有依据。
@小雨开源
感觉很欣慰,毕竟有人在用它,但是我觉得做技术要踏实一些,建议你也如此。
  回复  更多评论   

# re: 创造中国神话的MVC框架如何改变Web[未登录] 2008-05-08 15:20 过客

我觉得return "/WEB-INF/results/accepted.jsp ";这种不太好。
因为如果就是一两个返回,比较简单。直接写在代码里面好了。
但是往往从管理人员视角来说,需要看到整体页面跳转情况。

其实独立写XML配置我觉得不必直接return url好,但是有一个有点-->
方便写一个可视化编辑页面跳转的工具。比如eclipse 3.3 netbeans6.0里面都带了的哪个face_config编辑工具。我觉得就很方便。

主要是问题观察视角的问题,"视角"在现在流行语中,也就是所谓的"Aspect"吧。
  回复  更多评论   


只有注册用户登录后才能发表评论。


网站导航: