2014-01-19 47 views
-1

我不明白世界各地的時尚使用XML來存儲設置,頁面或GUI佈局,甚至豆集。如何用Java替換XML?

如果我們考慮到這樣的事實,即XML是不是一個單一的語言,而是一個模板來定義多國語言,大衆的瘋狂變得明顯。

爲什麼要使用DOZENS的語言而不是使用某個ONE?

例如,Java。

它可以定義或聲明任何類型的GUI層次結構,設置表格等等。

那麼,爲什麼我們不使用java文件來存儲所有的東西呢?

例如,一種可以提供設置在Java格式文件是這樣的:

class Properties { 

    String dbpassword = "password"; 

    String database = "localhost"; 

    String dbuser = "mkyong"; 

} 

這個文件可以在運行時通過編譯器和由反射提取的字段動態編譯。

那麼,我們爲什麼不這樣做呢?

想到的唯一原因是安全性。

外部文件可能包含不僅性能,而且一些構造函數代碼,它可以破解應用程序或使其崩潰。

所以。這種情況是否有保護?我們可以限制運行時編譯文件的可能功能嗎?

UPDATE

我不即指的Java。 Java只是一個示例。我需要使用單一語言的方法。

更新2

我要求,這將是更好地使用整個項目方面的一種語言。

假設在MVC模式,我們將使用三個不同語言的模型,視圖和控制器!這將是無稽之談!我們使用單一語言。我的意思是我們人們使用不同的語言,但每個程序員都使用一種仍然分離MVC的單一語言。這是什麼配置文件:多一個概念的分離。因爲概念被分開了,使用不同的語言沒有任何意義。

這也適用於HTML/JavaScript/CSS。沒有意義擁有三種語言。沒有任何該死的感覺!

我當然明白歷史原因等,但這些都是沒有意義的,這些都只是麻煩的原因。

那麼,爲什麼我們會看到同樣性質的新項目和新項目呢?

爲什麼MS爲WPF創建了XAML?他們提出了新的C#語言,爲什麼不把XAML加入其中呢?

爲什麼Oracle爲JavaFX創建FXML?感謝上帝,他們放棄了JavaFX腳本!因爲他們想爲RIA提供三種語言!

+3

簡單地說,因爲有不是基於Java的系統/應用程序/框架?!請求VB6開發人員包含Java代碼 - 我希望你知道我的意思 –

+1

對於你的擔憂,JSON將是更好的選擇。但即使如此,Lisp和Scheme程序員仍然會沮喪地搖頭...... – Ned

+0

@NedNowotny已經有一個[json-schema的草稿版本](http://json-schema.org/)可用,但它像缺少面向對象的繼承一樣有其侷限性。你可以用「包含」allOf定義來繞過這個定義(比如fe消息),但是你不能覆蓋那裏定義的東西 - 被驗證的json消息必須經過兩次驗證檢查,相對於原始json模式和提到的一個。但是,如果被引用者包含諸如「addidionalProperties」之類的東西:false「驗證將很有可能失敗擴展參數 –

回答

2

的意見確定了一個可能的解釋:

一個Java語法將很難應對來自其他語言。

...雖然對於Java程序的配置屬性來說,這似乎有點延伸。 (爲什麼你會從一個非Java程序讀取一個Java程序的配置屬性?)

我想沒有人真正的原因做了你提出的是,它引入了一些問題,使您的解決方案一樣糟糕做XML配置「艱難的方式」。

  • 編寫配置的人需要了解Java語法。

  • 如果他們犯了一個錯誤,應用程序必須在啓動應用程序時處理Java編譯錯誤。

  • 訪問屬性將需要應用程序員編寫反射代碼。這段代碼通常很脆弱,編寫代碼與編寫一堆DOM行走代碼以從解析的XML配置文件讀取內容一樣困難。


現在也許XML是不是配置文件的最佳選擇。現在,我更喜歡經典的「屬性」文件語法或JSON。

但它XML也可以,如果你這樣做正確的方式。例如:

  • 如果你使用Java/XML綁定庫(如JAXB)你不需要寫一個XML解析器,或一堆粗糙的DOM遍歷代碼挑選出來的信息分析樹。

  • 您可以使用DTD或XML模式驅動的編輯器,以便用戶不需要編寫(甚至看不到)原​​始XML文件。

  • 如果您CONFIGS是真的複雜,你可以使用類似EMF他們模型,然後產生的DTD /架構和所有的配置訪問庫和自定義應用程序特定的配置編輯器的Java代碼。


爲了記錄在案,你提出的腳本語言如Perl和Ruby,Python和甚至 「SH」 是常用的辦法。只是它在靜態編譯語言中往往會有問題。


重新您的隨訪 「爲什麼要做XXX YYY」 的問題:

  1. 我不知道。我不在房間裏。
  2. 我的觀點是純粹的猜測。
  3. 它沒有任何區別爲什麼他們做到了。

爲了迴應您的一般「沒有意義」的評論/投訴,IT界充滿了務實的妥協/笨拙的解決方案。抱怨它並沒有達到任何目的。如果你想實現某些目標,請嘗試一下,向我們展示了它在Java中真正起作用的證據

+0

您的三個理由適用於任何語言,包括'XML'和'JSON'(人們需要知道JSON/XML,人們可能會犯錯誤並撥打錯誤的文件,訪問JSON/XML需要編寫解析代碼)。 –

+1

@SuzanCioc - 我的觀點是1)你沒有獲得任何東西,2)有*更好的*方法來處理不包含這些東西的XML。 –

+0

我想,如果對於我們顯然已經使用過的所有東西都有一個一勞永逸的解決方案,但由於情況並非如此,我們必須就某些IIOP標準達成一致,以便與不同甚至傳統系統進行通信。而且你不能強制每個人都同意這個標準 - 另外,有些人會一直以其他方式來解釋它,或者試圖用他們對每個人都需要的「概念」來控制開發過程(''640 kb就足夠了任何人「') –

0

使用可執行代碼進行配置是災難的祕訣。考慮:

class Properties 
{ 
    String dbpassword = "password"; 
    String database = "localhost"; 
    String dbuser = "mkyong"; 

    static 
    { 
     File userDir = new File("c:\\users\\mkyong"); 
     userDir.delete(); 
     //etc... 
    } 
} 

您可以嘗試通過使用安全管理器來限制損害,但它們並不完美。或者你可以編寫你自己的解析器,它只接受一個完整的Java程序可以做的子集(有限的API,沒有API等,類似於JSON vs完全的Javascript)。但在一天結束時,Java語法是否比其他配置文件格式更好?