<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 115  文章 - 481  trackbacks - 0
    <2007年8月>
    2930311234
    567891011
    12131415161718
    19202122232425
    2627282930311
    2345678

    常用鏈接

    留言簿(19)

    隨筆檔案(115)

    文章檔案(4)

    新聞檔案(1)

    成員連接

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

      只要你愿意,嚴肅規(guī)矩的java也同樣可以變得“動態(tài)”靈活起來。動有動的好處,靜有靜的好處。俗話說得好,“沒有規(guī)矩不成方圓”,但“生命誠可貴,愛情價更高,若為自由幫,兩者皆可拋”。那么作為忙碌在程序藝術世界里的子民們,我們何去何從呢?投奔動態(tài)語言陣營還是繼續(xù)在四平八穩(wěn)的Java領域奮戰(zhàn)? 在我看來,“動”或“不動”需要一個黃金分割點。

    1、尋找“動”與“不動”的黃金分割點

       兩年前,以Martin Fowler為代表的一群大師們突然集體投奔到了動態(tài)語言陣營,手持RoR這個“核武器”,大喊著要滅了Java,要取代Java。現(xiàn)在回頭來看,動態(tài)語言給我們確實帶來了一些的革命性的思想,但同時我們也發(fā)現(xiàn)被大師們忽悠了一把。
      對于強類型的Java語言來說,與真正的動態(tài)語言比起來,確實要受限制很多。在我看來,借某位大師的比喻,Ruby的敏捷相當草書,而java就是正楷。用Ruby,十個程序員寫出來的程序就是十種風格,這跟我們寫文章是一樣的。而Java就是規(guī)規(guī)矩矩宋體方塊字,橫是橫,豎是豎,先寫哪一筆后寫哪一劃,一切都是規(guī)定好了的。強類型的靜態(tài)語言從語法的底層就建立了一套較為穩(wěn)固的規(guī)則體系,因此更加規(guī)范,從長遠來說,或者是對于大型項目來說,肯定是有規(guī)范并且規(guī)范嚴格的,較之規(guī)范不嚴格的表現(xiàn)起來從擴展性、可維護性等要優(yōu)秀得多。
      動態(tài)語言與強類型的靜態(tài)語言,他們各有自己的特長范圍。在企業(yè)級應用領域,JavaEE的優(yōu)勢不是一天兩天建立起來的。而動態(tài)語言其實由來已久,最優(yōu)秀我覺得應該算是javascript了,想想以前用asp寫程序,服務器及客戶端腳本都用的js,對于小型的應用來說,確實很舒服。而近兩年由于Ajax概念股的走紅,javascript更加春風得意,prototype.js等一批的Ajax框架及引擎更是把javascript的OO及動態(tài)特性發(fā)揮到極致。對于來勢兇猛的RoR來說,在我看來最好先去跟php、Python這種同類的競爭者好好PK幾年,如果不被他們滅掉的話,然后再來研究要“花多少光年來滅掉java”這樣的命題。
      對于小型的應用來說,小巧、靈活、簡單的動態(tài)語言,肯定在先機上占有一定優(yōu)勢。但對于大型的企業(yè)級應用來說,動態(tài)語言的這種巧、活、隨意性恰好成為其劣勢。這其中的原因除了本身能力(多核、線程、系統(tǒng)資源等)有限以外,太“草”了也是限制其發(fā)展的原因。事實證明,動態(tài)語言能做到的,咱們靜態(tài)語言稍為動動腦子調(diào)整一下也能做到,比如Groovy;而靜態(tài)語言能做到的,動態(tài)語言打死也做不到,除非他自己變成靜態(tài)的強類型語言,比如多核線程、二階段分布式事務。如果做到了,他可能就不僅僅是動態(tài)語言了。
      動有動的好處,靜有靜的好處。俗話說得好,“沒有規(guī)矩不成方圓”,但“生命誠可貴,愛情價更高,若為自由幫,兩者皆可拋”。那么作為忙碌在程序藝術世界里的子民們,我們何去何從呢?投奔動態(tài)語言陣營還是繼續(xù)在四平八穩(wěn)的Java領域奮戰(zhàn)?
      在我看來,“動”或“不動”需要一個黃金分割點。而在EasyJWeb之所以提供一些“動態(tài)”特性的支持,也就是尋找這樣一個分割點而做的,把動與靜的好處進行分析、權衡,然后讓JavaEE應用開發(fā)變得更加的容易。努力尋找這樣的黃金分割點,對一些非常好的動態(tài)特性及思想提供應用級的支持,而對于一些必須規(guī)范才能產(chǎn)生效率的特性,則堅持推廣應用。Java社區(qū)中的很多人都在為尋找這個分割點而努力。Java本身也已經(jīng)意識到這一點,在其新的版本中都增加了對一些優(yōu)秀的動態(tài)語言特性的支持。
     當然,對一直覺得“受約束、受限制”的我們來說,能“動”一點、想“草”的時候“草”兩下,這是一件非常快樂的事兒。因此,EasyJWeb在基于Java這樣一個具有規(guī)范的平臺及環(huán)境作為基礎的前提下,做了一些工作,使得我我們在一定的范圍內(nèi)也可以靈活的“動”起來,隨性地“草”起來,這樣使得我們可以放開手腳、輕松大膽的往前走。下面我通過一些例子來說明。

    2、百變CmdAction-AbstractCmdAction
      在EasyJWeb-.10新版本的Command類型的Action基類即AbstractCmdAction中,提供了足夠的靈活特性使你得可以像使密宗拳一樣書寫Java Web Action。可以根據(jù)你不同的應用場景,像用動態(tài)語言那樣書寫Action中的command。
      假如我們在一個模塊中要執(zhí)行一個名為create操作,下面的方法簽名都是合法的:

    public Page doCreate(WebForm form,Module module)
    public Page doCreate(WebForm form)
    public Page doCreate(Module module)
    public Page doCreate();
    public void doCreate(WebForm form,Module module)
    public void doCreate(WebForm form)
    public void doCreate(Module module)
    public void doCreate();


    另外,把方法名稱改成create,系統(tǒng)也一樣能識別。如:

    public Page create(WebForm form,Module module)
    public Page create(WebForm form)
    public Page create(Module module)
    public Page create();
    public void create(WebForm form,Module module)
    public void create(WebForm form)
    public void create(Module module)
    public void create();

       我們可以使用xxx.ejf?easyJWebCommand=create的方式來調(diào)用這個方法,也可以使用xxx.ejf?cmd=create的方式來調(diào)用,甚至我們還可以使用/ejf/xxx/create的形式來調(diào)用。

      這種靈活的Action中的命名方法,一方面可以使代碼更加簡潔,易維護,同時也使我們的代碼看起來更cool。另外一個主要原因是其使我們可以非常容易書寫這些方法的測試代碼,不需要任何Web容器,我們就能運行EasyJWeb的單元測試。

      看看Struts那種每個方法都必須生搬硬套的生成下面的方法:

    public ActionForward command(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {

    }


      對照EasyJWeb中提供的百變Command方法簽名,您是否感覺到這個世界正在前進呢?
    3、更多的“動感”地帶
      想動就動起來吧,不僅僅體現(xiàn)在方法的書寫方式上。在EasyJWeb中很多地方都用到了這種“動態(tài)”的特性,比如forward及go方法提供的多種調(diào)用方法,驗證標簽中以自然語言為主體的動態(tài)參數(shù)配置信息,都體現(xiàn)了EasyJWeb能“動起來”的特性。
      以驗證為例,我們可以通過多種方式來告訴EasyJWeb我們需要進行驗證。比如我可以通過在@FormPO中針對一個或多個屬性指定驗證規(guī)則,看示例:

    @FormPO(name="person",validators={@Validator(name="required",field="name,sex,heigth,borndate"),@Validator(name="range",field="borndate",value="min:1908-01-01;max:2008-01-01")})
    public class Person{
    …屬性及getter
    /setter方法
    }


      你應該猜得出來,上面的標簽中我們指定Person對象的name,sex,heigth,borndate等屬性為必填屬性。在驗證數(shù)據(jù)范圍的RangeValidator中,你可以不用去管要驗證的目標類型是Integer還是BigDecimal或者是Date,只要他能比較,就可以應用該驗證器來對其值范圍進行驗證,確保我們的域模型得到的是一個合理的值。
      在標識驗證的時候,可以設置自定義的驗證提示信息。比如你可以使用下面的方式來標識一個范圍驗證:
    @Validator(name="range",field="borndate",value="min:1908-01-01;max:2008-01-01;min_msg:出生日期不能小于1908年;max_msg:出生日期不能大于2008年!")
      除了min_msg及max_msg以外,你還可以使用基于java習慣的minMsg及maxMsg來標識同樣的驗證提示信息。

    posted on 2007-08-17 09:18 簡易java框架 閱讀(1010) 評論(4)  編輯  收藏

    FeedBack:
    # re: java也能“動”起來  2007-08-17 12:43 beans
    前面分析得很精彩,easyjweb沒用過,不太好評價。  回復  更多評論
      
    # re: java也能“動”起來  2007-08-17 14:29 itkui
    文章寫的很出彩,呵呵!  回復  更多評論
      
    # re: java也能“動”起來 [未登錄] 2007-08-18 07:52 z
    對于來勢兇猛的RoR來說,在我看來最好先去跟php、Python這種同類的競爭者好好PK幾年,如果不被他們滅掉的話,然后再來研究要“花多少光年來滅掉java”這樣的命題。  回復  更多評論
      
    # re: java也能“動”起來  2007-08-20 09:15 DBS
    這幾天下載了easyjweb框架,學習了一下。感覺很不錯,第一次看到國產(chǎn)開源MVC中做得這么好的  回復  更多評論
      

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


    網(wǎng)站導航:
     
    主站蜘蛛池模板: 国产91久久久久久久免费| 5555在线播放免费播放| 免费无码又爽又高潮视频| 精品亚洲AV无码一区二区 | 最近中文字幕mv手机免费高清| 麻豆亚洲AV永久无码精品久久| 日韩精品无码免费专区午夜不卡 | 亚洲精品国产精品乱码视色| 乱爱性全过程免费视频| 亚洲国产一区明星换脸| 羞羞视频免费网站日本| 亚洲精品成人在线| 中文字幕免费在线看电影大全| 中文字幕第13亚洲另类| 国产又黄又爽又大的免费视频 | 亚洲人成精品久久久久| 免费久久人人爽人人爽av| 亚洲成在人天堂一区二区| 久久国产高潮流白浆免费观看| 亚洲最大在线视频| 永久免费观看的毛片的网站| 免费毛片毛片网址| 亚洲人成中文字幕在线观看| 午夜老司机永久免费看片| 99热亚洲色精品国产88| 免费国产人做人视频在线观看| 一级毛片免费播放试看60分钟| 亚洲va中文字幕无码久久| 午夜免费福利片观看| 亚洲一区二区三区丝袜| 免费在线观看污网站| 成人无码a级毛片免费| 亚洲三级在线视频| 亚洲国产精品第一区二区三区| 在线观看特色大片免费网站| 亚洲一区在线视频观看| 亚洲成人国产精品| 国产精品1024永久免费视频| 美女视频免费看一区二区| 亚洲Av熟妇高潮30p| 日本19禁啪啪无遮挡免费动图|