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

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

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

    人在江湖

      BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
      82 Posts :: 10 Stories :: 169 Comments :: 0 Trackbacks

    XML曾經很火,什么技術只要跟XML沾邊兒就頂上“標準”的光環,后來大家慢慢意識到XML的種種弊端,比如差勁的表達能力,枯燥的解析(SAX),性能低下(DOM),越來越多的人開始理智地使用XML。只把它用在“合適”的時候。程序員中仍然存在濫用XML的慣性,最近還和同事們爭論了半天java和xml的使用場景。

    先跑下題聊聊java. 近兩年越來越多搞Java的人跑去學動態語言,ruby, groovy, scala之類的。 原因在于這些動態語言“表達能力”更好。是的,這些語言更靈活,更精煉。不難理解,后出的編程語言更傾向于合理,畢竟它有前人的寶貴經驗可以借鑒。java的一些設計的確令人詬病,比如checked exception, 對泛型支持的不完備。但就從“表達力”來說,我覺得java的表達力不強不弱正正好好。Java的定位本來就是大規模企業級應用,過度靈活的編程語言不易維護。新型的動態語言傾向于過度靈活,雖然支持快速開發,但是我相信在多人,甚至幾十人合作開發的項目中,如果對語言非常靈活的特性不加以限制,隨著程序的規模一點點增大,維護的難度會陡然加大。而一旦通過convention限制使用語言的一些特性,限制來限制去不就又成java了么?好吧,好吧,我知道這會是個有爭議的話題,我就是不相信用ruby能做個ERP出來,五年之后也不會有。這不是這篇文字要討論的重點,我想說的是,java在表達能力方面已經讓一些人不滿意了,而XML呢?XML的表達能力比java差了N多個數量級!這年頭,騎三輪車回收電腦的都知道程序設計要有彈性,換句話說,能適應變化。于是一個簡單的夢想就是,來了新需求,咱不用改code, 改改xml配置就能滿足就好了。是的,我也這么希望,尤其在我睡著的時候。以Java這樣的面向對象 + 一些動態特性(reflection,dynamic proxy甚至aspectJ)的語言都很難做到如此靈活的應對變化,xml怎么會更容易做到呢?很多人喜歡XML的簡單直觀。比如我們可以在SWING上面封裝一層基于XML的界面引擎,于是GUI就可以簡單地寫成這種風格:

       1: <panel id=”xyzwidth=”360heigh=”720”……>
       2:  
       3: <label id=”label_1attr_1=”xxxattr_2=”yyy/>
       4:  
       5: <textarea id=”textarea_1attr_1=”xxxattr_2=”yyy/>
       6:  
       7: </panel>

    它有一個好處就是易于擴展,比如現在又想加一個checked box,只要在里面插入一個<checkbox id=……/>就行了。我承認它的確易于擴展。但是如果你簡單封裝一下java API,不也是一行code的事兒么?無非就是panel.addChild(new CheckedBox(attr_1, attr_2))之類的這么一句code。難道這就不簡單,不直觀了?程序一涉及到xml,就涉及到IO, 解析XML,這都是額外的工作量,況且xml中的“對象”(我很難承認complex type算是對象)跟Java里的對象根本不是一碼事,從xml里解析出來的表示數據類型的type最后還是要生成對應特定的java對象,這都是麻煩事兒。 多寫code的壞處遠不止寫的時候費事兒,所寫的每行code最后都是要維護的,就算code很strong, 我還嫌code太長,滾鼠標滾輪兒累手指頭,多個文件放那兒累花眼。總之,但凡xml改一兩行能解決的問題,不用xml,就用java也是一兩行的工作量,只要稍微花點心思封裝好API就行。不用XML可以省不少開發和維護的工作。理想情況下,改改xml就能應對新需求。但現實和理想總是有差距的,一旦xml的schema不足以應對變化,我們就得改xml, 改schema,改解析的code,改業務邏輯的code(這個沒法避免)。這不是沒事兒找病么?xml是extendable markup language. 它真能比java還extendable?扯淡!

    當然XML有它合理的應用場景,我能想到的是四個方面,一定有漏掉的情況,歡迎朋友們補充。

    一, 存儲樹狀數據(起碼三層以上。三層或三層以下就用java合成也挺方便的);二, 配置信息;三、描述標準協議(比如wsdl); 四,wrap數據以便于傳輸等(比如soap)

    在應用產品中,自己設計xml來輔助應用系統的場景不應該很多。

    另有一種使用xml的誤區是,把xml暴露給用戶讓他自己“擴展”。我覺得, 凡是暴露給客戶的東西都是UI,平時Swing界面,web界面是GUI,暴露給客戶改的xml算是UI. 也許有的人說,一旦弄GUI,就有一堆麻煩事兒,比如i18n啥的,讓用戶自己配置配置xml就能改動頁面不是挺好么,還不用考慮i18n了。問題是,用xml不是“不用”考慮國際化,而是根本沒法考慮國際化。

    <wallet><money>100</money></wallet> 這個美國人能看懂,對中國人就得用<錢包><錢>100</錢></錢包>

    這么做很明顯用戶體驗很差。另外,這也一定程度上暴露了你的實現方式,起碼客戶知道,哦,原來你是用xml存數據的,schema就是這個樣子。

    Ajax剛鋪天蓋地的時候,都用xml傳數據,后來越來越多人用Json. Spring和Hibernate等一堆框架在幾年前都用巨大的XML來配置,現在越來越多人轉向annotation(當然,這個有一定爭議)。XML熱度減退,大家趨于理性是好事。XML當然很有用,但是程序員們該能想清楚什么是"使用", 什么是"濫用".

    posted on 2011-05-07 00:22 人在江湖 閱讀(3051) 評論(9)  編輯  收藏 所屬分類: design

    Feedback

    # re: XML的濫用 2011-05-07 12:46 Unmi
    好像還是沒理出個理來,沒看到強有力的證明。  回復  更多評論
      

    # re: XML的濫用 2011-05-07 18:18 rox
    和樓主感同身受。
    XML不是不好,是被神話和濫用了。
    XML使用上,最方便的莫過于Flex的ActionScript,太方便了。  回復  更多評論
      

    # re: XML的濫用 2011-05-10 06:36 jacklondon
    有幾點不同意樓主:
    1. xml 在 GUI 編程中的應用。
    我覺得還算正常。純 Java 之所以不適合,是因為對同樣的工作,Java 可以有多種寫法,會造成所見即所得的顯示問題。以下摘自我之前的博客:
    Java 語法中并沒有支持 GUI design time 的語法標簽,對于編譯器來說,在設計時從Java 代碼還原到設計窗口技術上太難。 JBuilder 允許程序員修改向導產生的 jbInit 函數,結果是 JBuilder 的 GUI design 經常出笑話,比如 JBuilder 好幾個版本都存在的 GUI 設計時只認識 this.setSize 不認識 this.setBounds 的問題。 Netbeans 干脆不允許程序員修改 initComponents 函數,是好是壞還不一定。一般而言,Netbeans 對于每一個可視化的 .java 文件都會生成一個 .form 文件。對于 Netbeans 編譯器來說,在設計時從Java 代碼還原到設計窗口是通過解析 .form 文件,這樣技術難度下降很多,也不會像 JBuilder 一樣經常出低級笑話。
    免費的 Java GUI 開發工具 Netbeans 介紹
    http://blog.csdn.net/jacklondon/archive/2003/04/19/14262.aspx
    2. 國際化用 xml 很正常。之前很多程序都有 ini 文件,這樣做國際化,好處在于可以讓熱心的用戶(不懂編程的用戶)幫忙翻譯。樓主所說“一定程度上暴露了你的實現方式”沒有什么道理。我用 ini /xml 暴露了什么?
    ----歡迎大家試用我們的單點登錄系統 http://zhegui.biz  回復  更多評論
      

    # re: XML的濫用 2011-05-10 08:01 人在江湖
    Jacklondon, 你舉的兩個例子跟我的想法沒有沖突。
    第一個例子:
    你說XML可以在GUI里使用,是基于特定的IDE的支持,<B>不是你自己設計出一個基于xml的引擎</B>。NetBeans這么做是因為它是IDE。我絕不相信哪個應用產品先基于Swing封裝出來一套xml引擎,然后讓developer寫xml, 而不用寫java, 那使用這套引擎的人就根本不必是java developer了。 所謂"GUI Design出笑話"是IDE的問題,不是swing的問題。design time form文件應該是生成出來的吧?不是自己手敲xml就生成class, 讓JDK解析的吧?我認為有強烈需求要求程序員用xml寫GUI背后的原因是程序員本身不是swing developer.基于swing封裝成客戶化的更方便的component(更方便的意思就是更不靈活),一定比封裝成xml引擎更簡單.
    第二個例子,國際化不是functional層面的,“熱心的用戶”是幫程序員做事情的,不是真正產品的consumer. 我不喜歡的是,強迫使用產品的用戶edit xml.  回復  更多評論
      

    # re: XML的濫用 2011-05-11 00:08 jacklondon
    @人在江湖
    所謂"GUI Design出笑話"是IDE的問題,不是swing的問題----第一,沒有人提到Swing;第二,如果所有 Java IDE 都無法解決這些問題,就說明 Java 語法不適合用于“用戶界面設計”。注意,這里談的是“設計時”問題,不是“運行時”問題。
    如果說國際化用 xml/ini 是強迫用戶 edit xml ,那么你用什么技術談得上算是不強迫?如果按微軟的風格,是要用資源dll 的,這更強迫翻譯人員非用 visual studio 不可,更不可取。至少國際化用 xml/ini,是可以讓別人用操作系統自帶工具(windows/linux 都可帶有可修改 xml/ini 的文本編輯器),不用另外找工具。  回復  更多評論
      

    # re: XML的濫用 2011-05-11 07:43 人在江湖
    @jacklondon
    哈哈,首先還是感謝你在我的博客里發表技術看法,喜歡看到有見地的想法。
    我們沒有在討論同一個問題,你說“設計時”,只有IDE才涉及到“設計時”的問題,我博客里舉的例子是說程序員"手敲XML"還是"手敲java"寫應用程序的界面。我覺得從易用性角度說,兩者沒區別,但封裝到“手敲XML”的成本要高出很多很多,所以根本不可取。
    至于國際化的問題....
    我舉的例子是功能性的,不是i18n的,所以這個例子是
    <wallet><money>100</money></wallet> 這個美國人能看懂,對中國人就得用<錢包><錢>100</錢></錢包>

    用戶修改xml來做國際化,修改的是content,不是標簽本身。把resource property放xml里我覺得沒有問題,那么樣子會是
    <key name="abc.txt"> wallet </key>
    <key name="abc.txt"> 錢包 </key>
    我沒說非得把key翻譯成 鑰匙。 因為i18n用途的xml結構比輔助功能的xml簡單得多,對于復雜的xml結構(功能性質的),<B>標簽本身是有含義的,所以標簽本身有i18n的必要</B>。你跟我說的不是一回事。盡管我覺得用properties文件夠用了,不知道為什么一定要用xml. 對比java, 一涉及到xml就要多考慮I/O和解析。對比properties文件,一涉及到xml就要格外考慮解析。  回復  更多評論
      

    # re: XML的濫用 2011-05-18 15:34 greatghoul
    我是不喜歡使用xml的,感覺寫起來很累,還是annotation好用些

    相比之下,yaml要比xml好用多了。  回復  更多評論
      

    # re: XML的濫用 2011-05-19 00:23 jacklondon
    1. 在應用產品中,自己設計xml來輔助應用系統的場景不應該很多===樓主沒有說出個道道來。
    2. 用 xml不是“不用”考慮國際化,而是根本沒法考慮國際化====沒有任何道理。用 ini/xml 做多語言的軟件多了,我現在在用的 notepad++ 好像就是,dreamweaver 也是。
    3. 起碼客戶知道,哦,原來你是用xml存數據的,schema就是這個樣子。====那有如何?你知道又如何?你認為把軟件做到別人看不明白才是水平?軟件好用、符合用戶要求才是水平。  回復  更多評論
      

    # re: XML的濫用[未登錄] 2011-05-19 17:52 Frank
    xml 是可以國際化的,可以看
    Best Practices for XML Internationalization
    http://www.w3.org/TR/xml-i18n-bp/

    就是太麻煩了, Best Practice 就有24條之多,看起來那是相當的崩潰

    xml 處理起來比較麻煩, 尤其在沒有好的engine, 自己 parse 那是相當的痛苦,要是暴露給客戶,那就更麻煩了  回復  更多評論
      

    主站蜘蛛池模板: 成全视频免费观看在线看| 亚洲麻豆精品果冻传媒| 亚洲国产精品狼友中文久久久| 成全视频在线观看免费高清动漫视频下载| 2019中文字幕免费电影在线播放| 青青草无码免费一二三区| 91精品视频在线免费观看| 99视频在线看观免费| 91麻豆国产免费观看| 91精品免费国产高清在线| 久久天天躁狠狠躁夜夜免费观看| 成人免费观看一区二区| 成全视频免费高清| 国产又黄又爽又刺激的免费网址| 国产成人在线观看免费网站 | 免费看一区二区三区四区| 国产一级黄片儿免费看| 中文字幕日本人妻久久久免费| 无码国产精品一区二区免费vr| 一级毛片免费毛片一级毛片免费| 91热久久免费精品99| 国产成人无码免费看视频软件 | 久久免费国产精品一区二区| 午夜影院免费观看| 男女免费观看在线爽爽爽视频| 成人免费无码大片a毛片软件 | 99re在线精品视频免费| 999国内精品永久免费视频| 免费看片免费播放| 亚洲美女高清一区二区三区| 亚洲人成人一区二区三区| 无码欧精品亚洲日韩一区| 亚洲xxxxxx| 免费国产va在线观看| 中文成人久久久久影院免费观看| 999任你躁在线精品免费不卡| 西西大胆无码视频免费| 亚洲成a人片在线观看老师| 五月天网站亚洲小说| 亚洲日本VA午夜在线影院| 一级毛片免费在线观看网站|