程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> C#寫所見即所得的設計器(3)

C#寫所見即所得的設計器(3)

編輯:關於C語言

文檔的加載和保存

設計文檔可以保存為二進制文檔,純文本文檔和其他格式,在此推薦使用XML文檔格式。其好處是

設計文檔對象模型和XML文檔對象模型都屬於文檔對象模型,兩者原理和結構上都有著很大的相似性,設計文檔元素和XML文檔元素可以存在一一對應的關系。因此使用XML文檔加載和保存設計文檔對象是很自然的,實現起來比較簡單。

XML文檔是國際標准的文檔格式,非常開方,其他應用程序很容易利用設計器生成的文件,簡化了設計器和其他應用系統的數據接口。

已經存在標准的XML文檔解析器和XML文檔對象模型,因此不需自己處理XML文檔,只需調用標准庫加載XML文檔對象模型,然後按照一一對應的關系來生成設計文檔對象模型。

使用XML文檔有利於保持設計器的各個版本間的兼容性。只要XML文檔結構不發生大變化,低版本的設計器可以加載高版本的設計器生成的文檔,同樣高版本的設計器也很容易加載低版本的設計器生成的文檔。若使用二進制文件格式,則設計器需要編寫對於不同版本的設計文檔的預處理器,比較麻煩而且很難做到向上兼容。

在保存對象數據到XML文檔時,保存方式有兩種,保存到XML屬性和保存到XML元素。當指定某個XML元素用於保存對象數據時,若使用保存到XML屬性時,會對對象每一個屬性,將其數據保存到指定名稱的XML屬性中,而保存到XML元素時,會在當前的XML節點下新增一個指定名稱的XML子元素。然後將屬性值保存到XML子元素中。這兩種方式生成的XML片斷為:


value1
value2

面對這兩種方式,我建議選擇第二種,其原因有:

若保存到XML屬性,則當對象屬性比較多是,使用縮進方式輸出的XML文檔將比較寬,在查看是會出現橫向滾動條,不利於閱讀。而保存到XML元素時,XML文檔不會很寬,便於閱讀。

若多行文本保存到XML屬性,則一般不會以多行文本的方式保存,不利於閱讀。而保存到XML元素時,則保存的文本和實際的文本比較接近,便於閱讀。

若保存到XML屬性,則保存方式只能是一個屬性字符串,而保存到XML元素時則保存的方式很容易進行擴展。

雖然保存到XML屬性方式生成的XML文檔比保存為XML元素的方式要小,但XML文檔格式的設計目標是方便保存數據和交換數據,而不在乎文檔是否冗余,因此我們選擇保存方式時不必在乎XML文檔的大小。而且一般設計文檔的內容不很多,以目前計算機硬件條件無須在意XML文檔大小。

當設計器從XML文檔加載設計文檔時,首先生成XML文檔對象樹,然後根據一一對應的關系來生成設計文檔對象樹,此時需要從XML元素保存的信息來判斷該XML元素是對應於那種設計文檔元素,設計器可以從XML元素名稱來判斷,也可以從某個XML屬性來判斷,在此我使用XML元素名稱來判斷,首先是針對一個XML元素,獲得其名稱比獲得某個屬性值要方便,其次是XML名稱是必然存在的,肯定不為空,而XML屬性則可能由於某種原因而缺失,XML名稱比XML屬性要穩定。

基於上述的認識,當采用XML文檔作為保存方式時,設計基礎元素需要定義兩個虛函數,一個用於從XML文檔加載對象屬性數據,另一個要向XML文檔保存對象數據。而其他文檔元素對象則根據需要重載這兩個函數來實現自己的加載和保存對象屬性的操作,對於容器元素,還需要保存子元素數據到XML文檔和從XML文檔加載子元素。當然在實際應用中還要根據需要定義一些輔助成員來幫助加載和保存XML文檔。

設計器生成的XML文檔一般保存為文件形式,當然可以根據需要來保存的數據庫裡或者上傳到各種服務器中。若直接保存到數據庫中,則整個應用系統中所有的設計器編輯的都是同一個文檔版本,而且一旦保存便可立即應用。

用戶界面相關的接口

設計器需要繪制文檔視圖,則需要設計文檔對象模型提供支持。因此文檔基本元素需要定義兩類通用接口,一個是和繪制文檔相關的接口,一個是處理鼠標鍵盤事件相關的接口。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved