比較一下 ADO.NET 與 J2EE 的永續機制

  • ADO.NET 的設計理念是將資料庫“搬移”至應用伺服器的記憶體(DataSet),然後就與資料來源離線,讓應用程式就近方便“撈”資料處理。這是屬於“寬鬆耦合 (loose coupling)”的設計方式。
  • J2EE 眾多永續儲存機制,包括 EJB Entity Bean, Hibernate 等,都是“緊緊地”維繫資料庫與應用伺服器內的資料物件 (Data Object)的一致性,將 O-R mapping 的自動化做到“最善”。這是屬於“緊密耦合 (tight coupling)”的設計方式。
  • 兩者的設計方案並不一樣,但也各有各的優缺點,並不容易評斷好壞。無論如何,企業層級的系統設計,不應受限與受制於現有的系統機制,而是應該活用、善用其優點。

DataSet 在中間層的設計策略

目的:設計 虛擬DB(Virtual DB),位於中間層(middle-tier) ,讓 企業物件(business Object) 與 控制物件(control object) 得以方便撈資料處理。

實現方法:設計 ModelVDB 類別(Class),內含兩個屬性(property),一為 DataModel;另一為 DataUtility。兩者均為 DataSet 類別。

  • DataModel 定義與關連資料庫一樣的 Table Schema(可依業務性質定義相關的 Table 即可)。
  • DataUtility 定義關於 使用者資訊、查詢條件參數、資料庫連線資訊等 Table Schema。

設計約束:

  • 把 ModelVDB 視為是 “Value Object”,所以不提供任何方法供物件存取,企業或控制物件是直接透過屬性的存取來取得 位於 VDB 內表格的資料。
  • VDB 要讀取或寫入資料庫系統,是透過控制物件呼叫 “小弟物件(PO, Persistent Object)” 負責與資料庫的溝通。
  • Form 物件不得直接存取 ModelVDB ,必須透過控制物件,以維護資訊的完整性與封裝(encapsulation)。

圖1、ModelVDB 與其它物件的相依性關係
(點擊圖片鏈接看原圖)圖1、ModelVDB 與其它物件的相依性關係

圖2、範例–查詢訂購資訊 by ModelVDB
(點擊圖片鏈接看原圖)圖2、範例–查詢訂購資訊 by ModelVDB

DataSet 在 UI 層的設計策略

目的:設計 表單專用的虛擬DB(Virtual DB),讓 表單物件直接存取其內表格的資料,再透過 控制物件 轉換格式至 ModelVDB,然後寫回至實體資料庫,反之亦然。

優點:表單擁有專屬的虛擬資料庫,設計的表格可以以表單為單位,來儲存表單內的欄位資訊,而不用與實體資料庫的結構相符。UI 與 結構設計團隊可以個別開發,彼此不用互相遷就,未來只要在控制物件執行格式轉換即可。

實現方法:設計 ViewVDB 類別(Class),內含兩個屬性(property),一為 ViewModel;另一為 ViewUtility。兩者均為 DataSet 類別。

  • ViewModel 定義以表單為單位的表格,行(column)與資料型態以表單欄位為主。
  • ViewUtility 定義關於 使用者資訊、查詢條件參數等 Table Schema。

設計約束:表單要寫入實體資料庫時,將 ViewVDB 當參數傳遞給 控制物件,再由其轉換格式為 ModelVDB,再透過 PO 物件寫入實體資料庫。

圖3、ViewVDB 與其它物件的相依性關係
(點擊圖片鏈接看原圖)圖3、ViewVDB 與其它物件的相依性關係

圖4、ViewVDB 與 ModelVDB 的 Transform 循序圖表達
(點擊圖片鏈接看原圖)圖4、ViewVDB 與 ModelVDB 的 Transform 循序圖表達