首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 所見即所得設計器開發(三):XML 序列化策略與 UI 介面契約

     編輯:關於C語言

文檔儲存:XML 為首選格式

設計器文檔支援二進位、純文字、XML,強烈推薦 XML:

  • 模型同構性:設計器 DOM 與 XML DOM 同屬文檔物件模型,元素一一對應,序列化/反序列化自然簡單。
  • 標準化生態:成熟解析器(XmlDocument/XDocument)、標準格式、跨平台跨語言互通,簡化與外部系統整合。
  • 版本相容:結構微變時,低版本可讀高版本檔,高版本易兼容舊檔;二進位則需編寫預處理器,向上兼容極難。

XML 序列化:屬性 vs 子元素

儲存物件資料兩種風格:

<!-- 屬性風格 -->
<Element Prop1="value1" Prop2="value2" />

<!-- 子元素風格 -->
<Element>
  <Prop1>value1</Prop1>
  <Prop2>value2</Prop2>
</Element>

推薦子元素風格,理由:

  1. 屬性多時 XML 行寬超限,橫向捲動閱讀困難;子元素天然縮排易讀。
  2. 多行文字屬性值會被壓縮為單行,失去可讀性;子元素保留原始換行。
  3. 子元素易擴展(巢狀結構、屬性、混合內容),屬性僅限字串。
  4. 雖然體積較大,但 XML 設計目標是資料交換而非極致壓縮;現代硬體下設計器文檔體積可忽略。

反序列化:XML → 設計器 DOM

  1. 載入 XML 產生 XmlDocument 物件樹。
  2. 依一一對應關係遞迴建構設計器元素樹。
  3. 元素型別判斷:採用 XML 元素名稱(而非屬性),因名稱必存非空、穩定性優於屬性。

基礎元素序列化契約

DesignElement 定義兩個虛擬方法:

  • LoadFromXml(XmlNode):從 XML 節點載入屬性與子元素。
  • SaveToXml(XmlNode):將屬性寫入 XML 節點(建立子元素)。
  • 容器元素額外處理子元素集合的遞迴載入/儲存。
  • 實際應用中輔以輔助成員(命名空間管理、型別註冊表等)。

儲存目標多樣化

XML 文檔可存檔案、資料庫(單一版本、即時生效)、上傳伺服器,統一介面隔離儲存細節。

UI 相關介面契約

設計器視圖繪製需 DOM 支援,基礎元素須定義兩類介面:

  • 繪製介面:Paint(Graphics, ViewContext)、GetBounds()、HitTest(Point) 等。
  • 輸入事件介面:OnMouseDown/Up/Move、OnKeyDown/Press/Up、OnDragDrop 等。

這兩類介面構成「文檔模型 ↔ 視圖控制器」的標準契約,支援多視圖、無頭渲染(列印/匯出)等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved