xml建模包括以下 面向XML的領域建模設計

2021-10-17 01:45:33 字數 2103 閱讀 4197

在領域驅動設計(ddd:domain driven design)中,實現業務邏輯層主要有三種模式[1]:transaction script、domain module和table module。隨著業務邏輯複雜程度的增加,採用各模式實現的工作量變化趨勢有所不同;根據應用特點,三種模式也各有優勢:

transaction script:業務邏輯直接用sql指令碼與資料庫互動,實現簡單,但是限於sql面向過程化的特點,完成複雜業務邏輯時工作量較大。

domain module:將業務資料封裝為業務物件,適於業務邏輯複雜的應用,但需要o/r對映的支援。

table module:將業務資料組織成資料表方式,雖然物件化特徵不如domain module明顯,但適於展現層使用。

圖1:實現所需工作量與業務邏輯複雜度的關係

應用建設初期選擇的實現模式隨著業務需求和歷史資料量的變化可能需要進行調整,此時要增加乙個適應性機制,保證在盡量不影響客戶程式的前提下,選擇合適的實現模式。隨著xml資料使用日趨廣泛,須借助xpath、xquery和xsl為層次型資料增加專門的擴充套件機制,使得基於xml資料來源的業務邏輯也可以採用上述三種模式實現。

概要設計

整體邏輯結構

總體適配機制如下:

圖2:總體實現結構

效能改進

圖3:借助dto,domain module物件間接訪問資料來源

詳細設計

面向關聯式資料庫的業務服務設計

為了將業務實體納入適配機制的管理,依據依賴倒置原則,先對各模式實現的業務實體進行抽象。

圖4: 關聯式資料庫方式下的適配機制

表1:關聯式資料庫下三種模式的執行特徵

面向xml資料的擴充套件設計

由於xml的層次特徵,3個模式的實現技術與關聯式資料庫不同:

表2:xml資料下三種模式的執行特徵

圖5: xml資料方式下的適配機制

配置機制設計

通過增加服務介面工廠類的方式隔離客戶程式與具體業務服務實體類間的依賴,工廠類通過配置管理configmanager獲得每個目標服務介面對應的實體類名稱,借助反射動態包裝目標服務介面。靜態結構和執行過程如下:

圖6:配置管理機制

圖7:客戶程式獲得業務服務介面的時序關係

實驗環境準備及實驗結果分析

測試業務物件

為了比較三種模式實現特點的不同,測試中設計了2個具有master-detail特徵的業務實體:customer和order,兩者之間也存在1:n的關係,對應的關聯式資料庫和xml資料實現如下:

圖8:業務實體

圖9:關聯式資料庫方式下業務實體實現

圖10:xml資料方式下業務實體的實現

目標服務是乙個根據客戶名稱,返回其所有訂單明細項小計之和的介面。

測試內容準備

針對關聯式資料庫和xml資料方式的不同,業務邏輯如表3。其中,xml資料的transaction script模式為了計算簡單,增加乙個採用xstl生成 「客戶名稱—訂單項明細小計」的中間過程:

圖11:xml

transaction script方式下生成中間結果的xslt

表3:兩種資料模型下三個實現模式的計算方法

測試資料

表4:測試資料

測試結果及分析

通過修改configmanager中實現業務服務的實體類名稱,結合資料庫呼叫監控獲得如下資料:

表5:測試結果

測試結果分析如下:

1)借助適配機制,在目標實現模式甚至資料模型修改時,客戶程式保持穩定,修改內容控制在配置檔案部分,不影響客戶程式的業務邏輯;

2)使用不同模式設計完成的業務物件,借助適配機制和xml資料擴充套件機制,在關聯式資料庫和xml資料方式下,可完成同樣的服務功能;

3)通過dto元件的呼叫打包作用,可以將包括2份訂單、4項訂單明細的資訊一次性提取,將多次呼叫打包為1次呼叫,減少了網路往復。

總結依據依賴導致原理設計的適配機制可以從一定程度上減少客戶程式與業務邏輯的耦合程度,在部署、執行環境變化時,可通過調整配置選擇合適的業務邏輯實現模式,並且不需要客戶程式聯動修改;dto物件的加入可以減少分布式呼叫中的往復次數,對應用效能的提公升有利。實際工程中,由於業務邏輯實體往往需要被多個客戶程式呼叫,需要有效的併發機制配合,後續研究中將著重對併發能力進行調整。

[2] biping joshi著,pro .net 2.0 xml

乙個簡單的xml讀寫類理解下物件導向 二

比較上段 引入了異常處理。try catch 時特殊的處理放在前面,因為捕捉後會停止繼續捕獲,所以特殊自定義的放前面才能獲取到更詳細的所需要的異常資訊。而不是系統預設的簡單異常資訊。class xmlexception extends exception public function geterr...

乙個簡單的xml讀寫類稍理解下物件導向的使用

1,xmlobject物件內建了 tostring 魔術方法所以xml的物件屬性可以直接echo 或者可以被 string xmlobject 強制型別轉換為string型別,下面 有演示及說明。class conf public function write public function get...

XML 略談DTD XML文件的合法構建模組

dtd 文件型別定義 的作用是定義 xml 文件的合法構建模組。它使用一系列的合法元素來定義文件結構。以上是官方發言。說幹就幹,寫了點測試 試了試dtd的引入,話不多說上 dtd檔案 element 班級 學生 老師 年級 元素 號代表可以有多個 element 學生 名字,性別,年齡,介紹,愛好 ...