????????使用XML設計表現層,統一Web Form與Windows Form的外觀。
1.XML(可擴展標記語言)
? ? ? ? XML(可擴展標記語言)與HTML類似,是一種標記語言。與主要用于控制數據的顯示和外觀的HTML標記不同,XML標記用于定義數據本身的結構和數據類型。XML已被公認為是優秀的數據描述語言,并且成為了業內廣泛采用的數據描述標準。
? ? ? ? 由于XML的設計目標是描述數據并集中于數據的內容,所以雖然XML和HTML類似,但是業內很少采用XML作為表現層技術,表現層技術仍然是HTML唱主角。但是,由于Web應用程序對特定瀏覽器的局限以及性能問題,基于窗體表現形式的胖客戶端應用程序又開始有了卷土重來的趨勢。這兩種應用程序各有優勢,在未來很長一段時間這兩種技術架構都會并存。因此,許多開發廠商在開發新產品時提出了既要支持胖客戶端的表現形式,又要支持Web的表現形式。于是,有人提出將GUI用一個標準的形式描述,對于不同的表現形式,提供特定形式的轉換器,根據GUI的描述轉換成相應的表現形式。這就要求描述語言有非常好的通用性和擴展性,XML恰恰是這種描述語言理想的載體。
?2.用XML來描述GUI
? ? ? ? 對于大多數應用系統,GUI主要是由GUI控件組成。控件可以看成是一個數據對象,其包含位置信息、類型和綁定的事件等。這些信息在XML中都可以作為數據結點保存下來,每一個控件都可以被描述成一個XML結點,而控件的那些相關屬性都可以描述成這個XML結點的Attribute。由于XML本身就是一種樹形結構描述語言,所以可以很好地支持控件之間的層次結構。同時,XML標記由架構或文檔的作者定義,并且是無限制的,所以架構開發人員可以隨意約定控件的屬性,例如可以約定type="button"是一個按鈕,type="panel"是一個控件容器,type="Constraint"是位置等。這樣,整個GUI就可以完整而且簡單地通過XML來描述。例如:
? ? ? ? <component type="panel" constraint="16,22,78,200"><component type="button" isvisible="false"constraint="17,222,78,20"/></compoent>
? ? ? ? 這么一段XML很清晰地表示一個控件容器位置是(16,22,78,200),包含了一個不可視按鈕。用上述的XML形式將GUI按照數據描述的形式保存下來代替原先特有的表現形式所需要的GUI描述載體。然后,對于特定的表現技術,實現不同的解析器解析XML配置文件。根據XML中的標簽,按照特有的表現技術實例化的GUI控件實例對象。例如,解析器遇到button,JFC解析器會給予JLabel對象,XSLT解析器會給予<button id=…>這樣一個HTML字符串,在調用特定表現技術的API將實例化出來的組件對象添加到GUI上顯示。
3.策略模式?
? ? ? ? 從設計模式的角度來說,整個XML表現層解析的機制是一種策略模式。在調用顯示GUI時,不是直接調用特定的表現技術的API,而是裝載GUI對應的XML配置文件,然后根據特定的表現技術的解析器解析XML,得到GUI視圖實例對象。這樣,對于GUI開發人員來說,GUI視圖只需要維護一套XML文件即可。