小雨開源

          我也加入到了開源隊伍中了

          常用鏈接

          統(tǒng)計

          最新評論

          創(chuàng)造中國神話的MVC框架如何改變Web

            他們說:“Web改變世界,我們改變Web”,你知道是誰改變了誰嗎?

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

            他們勇敢,他們開放,他們懂得分享,所以他們選擇開源,并且可以自豪地宣布,他們活在“勇敢者的新世界”里。而同樣作為程序員的你,你的世界又是什么樣的呢?

            這里的“他們”,我想我不提大家已經(jīng)知道是誰,就是來自中國的開源項目operamasks。他們雖然沒有創(chuàng)造世界神話(不知道第四個通過JavaEE5認(rèn)證的服務(wù)器算不算),但他們確實創(chuàng)造了中國神話,如果你不服,那么你能舉出一個在他們領(lǐng)域里面比他們成功的同類產(chǎn)品嗎? 

            成功者都常說,“細(xì)節(jié)決定成敗”,只有為用戶考慮到各種細(xì)節(jié),用戶才會支持你。Operamasks的成功,我覺得除了他們的“勇敢”以外,還有一個重要因素是“細(xì)節(jié)”,他們考慮到了很多細(xì)節(jié),很多都是在JSF這樣一個“標(biāo)準(zhǔn)”層面的東西無法強制規(guī)定死,但往往對用戶來說又是非常實用的細(xì)節(jié),還有解決了很多常遇到的繁瑣細(xì)節(jié)。

            道理及感嘆在這里就不想多發(fā)了,我想大家都關(guān)注的是具體的技術(shù),所以本文就簡單例舉一下operamasks中的一些比較具有人性及親和力的細(xì)節(jié),看了后我想使用JSF開發(fā)的你一定很覺得非常體貼。
           

            1、 Kill掉JSF中令人討厭的配置

            一個簡單類似的注冊示例,成功就導(dǎo)航到/accepted.jsp去,而拒絕就導(dǎo)航到/accepted.jsp。

          ManagedBean中

           
          public String signup() {

              
          if (Math.random() < 0.2) {

                
          return "accepted";

              } 
          else {

                
          return "rejected";

              }

            }


            讓標(biāo)準(zhǔn)JSF來干吧,只是為了一個簡單的跳轉(zhuǎn),你就需要配置下面這樣一堆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幫你吞掉了這些無味又沒有太多營養(yǎng)的配置文件,并幫你消化,你說他是不是很人性。 

            另外,比如我們想要用到一個ManagedBean,標(biāo)準(zhǔn)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設(shè)計了一套注解annotation標(biāo)簽,你只需要在類的聲明前加上一個@ManagedBean標(biāo)簽即可,如下:

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

          public class MyBean {

          }


            類似這樣的細(xì)節(jié)還有很多,讓我們慢慢去發(fā)掘吧。

           

          2、用Ajax是那樣方便

            不管你信不信,事實擺在那里他真的很方便,Ajax的無刷新的效果對于Web應(yīng)用來說確實很酷也很鉉。對于傳統(tǒng)的JSF實現(xiàn),要想用Ajax你就要借助其它的一些Ajax框架,名字大一點算是ajax4jsf吧。下面看一個動態(tài)刷新頁面中id為msg處的內(nèi)容的示例:

            首先要定義一個JSF標(biāo)簽

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

            然后定義一個ajax2jsf的按鈕標(biāo)簽:

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


            而operamasks中的按鈕標(biāo)簽仍然是:

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


            不懂JSF的同仁一定都覺得怪,得懂行的就知道。這個<h:commandButton value="Server Submit" />可是在JSF的JCP中規(guī)定的標(biāo)簽標(biāo)準(zhǔn)啊,這個是任何支持JSF的開發(fā)工具都能認(rèn)識的,當(dāng)然程序員就不用說了。而那個什么<a4j:commandButton>是什么,那個reRender屬性,更是怪怪的,鬼二哥Studio才會認(rèn)他。


          3、Rich Components的集成

            看過Operamasks有名的jsfdemo示例吧,我們來看看反應(yīng)。一些菜鳥感嘆說:“發(fā)漂亮啊,太偉大了!”;一些小牛們會眼紅紅地生悶氣,怎么我才想到的你就做出來了;一些大牛們會說:“這不是偷人家ext的嗎?”,幽默一點會說:“我認(rèn)為是是進(jìn)到了extjs.com”;還有一些很有尊嚴(yán)并非常愛國的人會說:“真丟無恥,真丟中國人的臉,把別人的東西改改就說成自己的了,真賤……*&^&^%%^&8…”。

            上面的種種反應(yīng)應(yīng)該歸納為中國開源的特色悲喜劇。這里我想說的是,如果你真正花一點時間去了解一下Operamasks、了解一下Ext、了解一下Rich Components,那么所有你就不會成為上面悲喜劇中主角。

            我們知道Java跟Web式的Rich Components也無法,跟Ajax也無關(guān)。Ext專用于Web式的Rich Components,但對于企業(yè)級的應(yīng)用來說,他是解決了很小的一部分問題,而且單獨使用Ext要寫很多很多的跟很酷的Ajax效果一樣很酷又很讓人頭暈的Javascript。那么該如何解決這問題呢?很明顯,只有大家合作。Operamasks也就通過集成同樣是開源的Ext項目來實現(xiàn)了豐富的Rich Components,你可以像開發(fā)Delphi或VB那樣,直接往界面上拖出一棵非常實用的樹出來。Rich Components的集成中有很多細(xì)節(jié)及技巧,本文就不例出。
           

            其實細(xì)節(jié)還存在很多地方,比如多國語言中的小標(biāo)簽,注入Spring中的Bean,由于研究Operamask的時間比較短,而且資料也比較少(哪位朋友如果有好的資料或示例方便的話請發(fā)一些給我學(xué)習(xí)),所以暫時就寫這些,以后會逐漸以大家分享。 

          后記:

            雖然才開始投身開源的世界,但發(fā)現(xiàn)這個純技術(shù)的世界并不是想象中的那么單純。我上一篇寫過《中國java開源界最可愛的人們》一文,從一些同仁們的回復(fù)看出大家對中國的開源(包括項目、環(huán)境、產(chǎn)品、人品)仍然很悲觀,甚至還存在一些心理陰暗的人,篇造出什么“軟件界的洪志 lee”之類的大詞,也許就恐天下不亂吧。

          posted on 2007-12-14 09:20 小雨開源 閱讀(2250) 評論(19)  編輯  收藏

          評論

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web[未登錄] 2007-12-14 09:29 無名

          也就是說operamasks幫你吞掉了這些無味又沒有太多營養(yǎng)的配置文件,并幫你消化,你說他是不是很人性。

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

          建議你好好學(xué)習(xí)一下為什么會有配置文件的出現(xiàn)

          如果view的路徑變了,是 recompile 方便呢還是改變一下配置文件方便呢  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 09:33 小雨開源

          @無名

          兄臺注意看我的這一句:“吞掉了這些無味又沒有太多營養(yǎng)的配置文件”,“沒有太多營養(yǎng)”并不是“完全沒有營養(yǎng)”。所以如果在你說的那種情況配置文件是有營養(yǎng)價值的。但是80%的情況下,我們總不會沒事總?cè)サ粢粋€已經(jīng)事先定好的配置文件的文件名或路徑吧。注意這里說的是80%,不是100%。  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 10:46 隔葉黃鶯

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

          寫在代碼里其實對頁面流的理解極不利的

          這要去批評 struts/webwork/spring mvc 的做法都是有問題的,或者說不符合中國人的習(xí)慣?  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 10:59 guest

          @小雨開源
          想省事干脆去用Rails,何必用那個四不像的operamasks  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 11:30 小雨開源

          @guest
          Rails也就是考慮了這些細(xì)節(jié),所以才不錯。但不論如何,他跟JavaEE不是一個級別的!  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 11:48 guest

          @小雨開源
          呵呵,對啊,Operamasks這樣肆意亂改(或者叫踐踏)JSF到時也會跟JavaEE不在一個級別的。  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web[未登錄] 2007-12-14 15:11 小雨開源

          @guest
          知道EJB3與EJB2的區(qū)別嗎?:-)  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 15:19 guest2

          @小雨開源

          你知道spring2與spring1的區(qū)別嗎?
          你知道java與php的區(qū)別嗎?
            回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 15:21 guest3

          @小雨開源
          你知道annotation與XML的區(qū)別嗎?
            回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 16:14 小雨開源

          @guest,guest2,guest3

            拜托,不要跑題,OK。請你首先要有一點常識,你也就不會鬧“樣肆意亂改(或者叫踐踏)”的笑話,首先operamasks是一個JSF的實現(xiàn),JSF規(guī)范里面制訂了的,他都實現(xiàn)了,他再牛還不能牛到隨便改標(biāo)準(zhǔn)的地步,又何來踐踏呢?如果只是因為多了一些實用功能支持,就叫踐踏的話,那么JPA又怎么可能出來呢?眾多的JPA實現(xiàn)中,也增加了很多自己的一些特色功能,你能說別人在踐踏JPA嗎。
            好不好用,要以事實為基礎(chǔ),我想樓上的應(yīng)該沒有用過JSF吧,知道JSF怎么用嗎?知道JSF與Struts2的區(qū)別嗎?如果你沒有用過,又怎么知道這些細(xì)節(jié)上的改進(jìn),不是用戶所需要的呢?  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 16:53 mic

          性能是核心 解決問題是關(guān)鍵 包裝來包裝去的干啥呀 拷的煩事(code fans)們當(dāng)下流行祼睡 哈哈哈  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 17:18 gr8vyguy

          又見標(biāo)題黨  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 17:56 我來也

          賣拐的,忽悠繼續(xù)忽悠~~  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 21:14 kk

          Web應(yīng)用真的需要MVC嗎?不要以為這是一個蠢問題,社區(qū)里已經(jīng)有很多針對這個問題的討論,甚至有人說MVC已死(http://blog.jeffhaynie.us/mvc_is_dead.html),這里說的MVC指的是那種以服務(wù)器為中心得web架構(gòu),比較常見的是struts之類的框架,從根本上講jsf也是基于MVC的框架(雖然說不只是MVC)。在Ajax出現(xiàn)之前,瀏覽器的功能基本上只是顯示頁面,從業(yè)務(wù)邏輯到UI渲染都是服務(wù)器的責(zé)任,mvc在這時候是理所當(dāng)然最好的解決方案。
          但是web的世界已經(jīng)開始步入2.0的時代,基于Ajax,Widget,REST等等技術(shù)的web開發(fā)模式也逐漸被越來越多人采用,比起傳統(tǒng)的MVC模式來說,它們之間的區(qū)別在于,瀏覽器的能力得到了開發(fā),相當(dāng)一部分服務(wù)器的轉(zhuǎn)移到了瀏覽器端,隨之而來的是view的前移,controller的前移,服務(wù)器逐漸退化為無狀態(tài)的服務(wù)和數(shù)據(jù)提供者,在這種情形下我們還需要復(fù)雜的struts, jsf之類的mvc框架來開發(fā)web應(yīng)用嗎?
          我對openmask不是很了解,但是基于jsf的框架是否符合web開發(fā)發(fā)展趨勢是非常值得我們思考。是改變了web,還是被web淘汰?  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-14 23:22 hejianhuacn

          無論是JSF還是Asp.Net它們都是 頁面型MVC的代表:豐富的組件庫,會為我們的節(jié)省不少的開發(fā)時間,而且也能在一定程度上對代碼風(fēng)格作出統(tǒng)一。都是為了簡化開發(fā),增加開發(fā)速度,當(dāng)我們連HelloWorld都寫不 出來,或者說寫不好的時候,去考慮整個框架的擴展性我不知道有沒有必要。當(dāng)然,對大牛級的人我覺得設(shè)計東西的時候自然會考慮擴展性的,其實他們就是不考慮在舉手投足之間還是會流露出來,因為經(jīng)驗就是為了讓自己活得更好、更舒坦,所以沒人會愿意自己的日程安排被打亂,大牛們就更不愿意了。但人總有成長階段,一開始如果能夠?qū)懽銐蚨嗟腏SP或Servlet代碼絕對不是壞事,經(jīng)驗都是建立在痛苦之上的,為什么有這么多框架出來?就是因為大家被折騰得不行了,然后就有受不了的大牛們站出來!所以某個時候某樣?xùn)|東的出現(xiàn)都是有他的道理的,JSF那么牛他還不是建立在Servlet的基礎(chǔ)上的嘛。樓上兄弟的Web2.0 觀點真的有點讓人心驚,讓我想起公司的那些出去忽悠的高層們,我覺得Web2.0 應(yīng)該是一種整體架構(gòu),一種新的用戶體驗,而不是說展現(xiàn)和交互方式由什么來實現(xiàn),這不是重點。就像重構(gòu)所推崇的一些原則,兄弟如果你覺得自己心里對業(yè)務(wù)模型足夠的有數(shù)的話,開始寫代碼吧,然后在適當(dāng)?shù)臅r候進(jìn)行代碼的重構(gòu)可能會更好。我們要記住所謂JSP、JSF、ASP.Net、PHP它們都只是“翻譯引擎”,把代碼翻譯成HTML或是瀏覽器能夠理解的一些語法規(guī)則而已包括JavaScript在內(nèi)的腳本語言都是這些規(guī)則的一部分,所有的封裝都是為了更快的實現(xiàn)需求,讓開發(fā)費用更低,至于有沒有考慮會不會讓程序員抓狂,就不得而知,所以看開一些吧^_^  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2007-12-26 19:40 回復(fù)

          金蝶的東西要慎用啊,吃人不吐骨頭的主  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2008-02-20 14:13 范連洲

          @無名
          同意你的看法(寫程序時間不少了,不過返回這些東西,感覺很奇怪),那東西寫在程序里讓人看得頭暈眼花,如果結(jié)構(gòu)復(fù)雜,可能會出現(xiàn)
          return "/WEB-INF/results/accepted.jsp ";
          一大片。并且編譯好后無處查看網(wǎng)站流轉(zhuǎn)過程。  回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web 2008-02-24 02:53 張旭

          現(xiàn)在才看到這篇文章,充分的說明了我不夠關(guān)注外面的世界,每個人發(fā)表的見解會因為對技術(shù)的理解、經(jīng)歷、知識體系各方面相關(guān),但是每個人都有權(quán)利發(fā)表自己的看法,所以我盡可能客觀的發(fā)表我個人的感受和看法。
          @無名
          關(guān)于“配置文件還是annotation”的問題,這是一個系統(tǒng)設(shè)計的模式的問題,二者之間需要有一個平衡,將不易變或用戶不可控元信息存儲在annotation中,將易變的和用戶可參與的元信息存儲在配置文件中。
          基于JDK1.5的大多數(shù)平臺級的框架都提供對二者的并行支持,使用配置文件還是annotation完全是由使用者設(shè)計決定,平臺并不關(guān)心,只提供支持,這可以處理大部分實際應(yīng)用場景。
          @guest,guest2,guest3
          你們所發(fā)表的見解,客觀說,我覺得我無法評論。
          @kk
          我個人覺得無需討論概念及趨勢,我選擇在實踐中感受和體會。
          @回復(fù)
          我個人覺得不論發(fā)表什么內(nèi)容,都希望能夠有依據(jù)。
          @小雨開源
          感覺很欣慰,畢竟有人在用它,但是我覺得做技術(shù)要踏實一些,建議你也如此。
            回復(fù)  更多評論   

          # re: 創(chuàng)造中國神話的MVC框架如何改變Web[未登錄] 2008-05-08 15:20 過客

          我覺得return "/WEB-INF/results/accepted.jsp ";這種不太好。
          因為如果就是一兩個返回,比較簡單。直接寫在代碼里面好了。
          但是往往從管理人員視角來說,需要看到整體頁面跳轉(zhuǎn)情況。

          其實獨立寫XML配置我覺得不必直接return url好,但是有一個有點-->
          方便寫一個可視化編輯頁面跳轉(zhuǎn)的工具。比如eclipse 3.3 netbeans6.0里面都帶了的哪個face_config編輯工具。我覺得就很方便。

          主要是問題觀察視角的問題,"視角"在現(xiàn)在流行語中,也就是所謂的"Aspect"吧。
            回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 钦州市| 陆丰市| 夏河县| 柳江县| 云梦县| 宝丰县| 浦县| 安义县| 开化县| 仙游县| 红桥区| 洛川县| 繁昌县| 兴安盟| 鲁甸县| 新密市| 蓝田县| 东兴市| 米泉市| 林口县| 丁青县| 怀来县| 肇庆市| 黄大仙区| 信丰县| 达孜县| 工布江达县| 洛隆县| 乌拉特后旗| 烟台市| 凤凰县| 宁津县| 郓城县| 泉州市| 西乌珠穆沁旗| 万安县| 河东区| 凤翔县| 荆门市| 化德县| 黄平县|