小雨開源

          我也加入到了開源隊(duì)伍中了

          常用鏈接

          統(tǒng)計(jì)

          最新評論

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

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

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

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

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

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

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

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

            一個(gè)簡單類似的注冊示例,成功就導(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來干吧,只是為了一個(gè)簡單的跳轉(zhuǎn),你就需要配置下面這樣一堆html,你估算一個(gè)項(xiàng)目下來的配置文件代碼是多少。

          <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)的配置文件,并幫你消化,你說他是不是很人性。 

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

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

          public class MyBean {

          }


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

           

          2、用Ajax是那樣方便

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

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

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

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

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


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

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


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


          3、Rich Components的集成

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

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

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

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

          后記:

            雖然才開始投身開源的世界,但發(fā)現(xiàn)這個(gè)純技術(shù)的世界并不是想象中的那么單純。我上一篇寫過《中國java開源界最可愛的人們》一文,從一些同仁們的回復(fù)看出大家對中國的開源(包括項(xiàng)目、環(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)價(jià)值的。但是80%的情況下,我們總不會沒事總?cè)サ粢粋€(gè)已經(jīng)事先定好的配置文件的文件名或路徑吧。注意這里說的是80%,不是100%。  回復(fù)  更多評論   

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

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

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

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

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

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

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

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

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

          @小雨開源
          呵呵,對啊,Operamasks這樣肆意亂改(或者叫踐踏)JSF到時(shí)也會跟JavaEE不在一個(gè)級別的。  回復(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。請你首先要有一點(diǎn)常識,你也就不會鬧“樣肆意亂改(或者叫踐踏)”的笑話,首先operamasks是一個(gè)JSF的實(shí)現(xiàn),JSF規(guī)范里面制訂了的,他都實(shí)現(xiàn)了,他再牛還不能牛到隨便改標(biāo)準(zhǔn)的地步,又何來踐踏呢?如果只是因?yàn)槎嗔艘恍?shí)用功能支持,就叫踐踏的話,那么JPA又怎么可能出來呢?眾多的JPA實(shí)現(xiàn)中,也增加了很多自己的一些特色功能,你能說別人在踐踏JPA嗎。
            好不好用,要以事實(shí)為基礎(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嗎?不要以為這是一個(gè)蠢問題,社區(qū)里已經(jīng)有很多針對這個(gè)問題的討論,甚至有人說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在這時(shí)候是理所當(dāng)然最好的解決方案。
          但是web的世界已經(jīng)開始步入2.0的時(shí)代,基于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ā)時(shí)間,而且也能在一定程度上對代碼風(fēng)格作出統(tǒng)一。都是為了簡化開發(fā),增加開發(fā)速度,當(dāng)我們連HelloWorld都寫不 出來,或者說寫不好的時(shí)候,去考慮整個(gè)框架的擴(kuò)展性我不知道有沒有必要。當(dāng)然,對大牛級的人我覺得設(shè)計(jì)東西的時(shí)候自然會考慮擴(kuò)展性的,其實(shí)他們就是不考慮在舉手投足之間還是會流露出來,因?yàn)榻?jīng)驗(yàn)就是為了讓自己活得更好、更舒坦,所以沒人會愿意自己的日程安排被打亂,大牛們就更不愿意了。但人總有成長階段,一開始如果能夠?qū)懽銐蚨嗟腏SP或Servlet代碼絕對不是壞事,經(jīng)驗(yàn)都是建立在痛苦之上的,為什么有這么多框架出來?就是因?yàn)榇蠹冶徽垓v得不行了,然后就有受不了的大牛們站出來!所以某個(gè)時(shí)候某樣?xùn)|東的出現(xiàn)都是有他的道理的,JSF那么牛他還不是建立在Servlet的基礎(chǔ)上的嘛。樓上兄弟的Web2.0 觀點(diǎn)真的有點(diǎn)讓人心驚,讓我想起公司的那些出去忽悠的高層們,我覺得Web2.0 應(yīng)該是一種整體架構(gòu),一種新的用戶體驗(yàn),而不是說展現(xiàn)和交互方式由什么來實(shí)現(xiàn),這不是重點(diǎn)。就像重構(gòu)所推崇的一些原則,兄弟如果你覺得自己心里對業(yè)務(wù)模型足夠的有數(shù)的話,開始寫代碼吧,然后在適當(dāng)?shù)臅r(shí)候進(jìn)行代碼的重構(gòu)可能會更好。我們要記住所謂JSP、JSF、ASP.Net、PHP它們都只是“翻譯引擎”,把代碼翻譯成HTML或是瀏覽器能夠理解的一些語法規(guī)則而已包括JavaScript在內(nèi)的腳本語言都是這些規(guī)則的一部分,所有的封裝都是為了更快的實(shí)現(xiàn)需求,讓開發(fā)費(fèi)用更低,至于有沒有考慮會不會讓程序員抓狂,就不得而知,所以看開一些吧^_^  回復(fù)  更多評論   

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

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

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

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

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

          我覺得return "/WEB-INF/results/accepted.jsp ";這種不太好。
          因?yàn)槿绻褪且粌蓚€(gè)返回,比較簡單。直接寫在代碼里面好了。
          但是往往從管理人員視角來說,需要看到整體頁面跳轉(zhuǎn)情況。

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

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


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


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 偏关县| 綦江县| 平邑县| 甘孜县| 正镶白旗| 永济市| 含山县| 云南省| 敖汉旗| 江门市| 志丹县| 万宁市| 皮山县| 八宿县| 海丰县| 弋阳县| 永安市| 澎湖县| 永登县| 景德镇市| 香港| 辉南县| 略阳县| 涟水县| 社会| 商水县| 同江市| 米林县| 壶关县| 化德县| 贵阳市| 那曲县| 中阳县| 巴彦县| 长沙市| 南城县| 牡丹江市| 金乡县| 陆丰市| 将乐县| 扎鲁特旗|