• 沒有找到結果。

第二章、 文獻探討

2.2 Object Relational Mapping (ORM)

ORM 技術是隨著物件導向開發方法的發展而產生的,是一種為了解決物

12

ORM 技術在實現上根據[13]的分類,有 4 種常用的設計模式:

(1)Table Data Gateway 模式、(2)Row Data Gateway 模式、(3)Active Record 模式 和 (4)Data Mapper 模式。

2.2.1 Table Data Gateway 模式

根據[13]定義:Table Data Gateway 是扮演一個資料庫的角色,通過它 可以處理所有對資料庫表格的訪問和操作,如圖 6 所示。Table data gateway 封裝了所有操作資料庫 table 或 view 的 SQL 語法,如:select、insert、update、

delete 等。當程式調用此 gateway 物件的方法即可與資料庫互動,存取資料 庫的數據。

圖 6 Table Data Gateway 模式的示意圖 [13]

Table Data Gateway 的好處是提供了一個簡單的介面(interface)來存取資 料庫的數據,而且它通常是無狀態的,因為它只負責資料庫數據的傳遞而 已。

而使用 Table Data Gateway 需要考慮的問題是如何處理從請求中返回的 多項查詢值。一種做法是返回簡單的資料結構,比如 Map;另一種做法就是 使用 Data Transfer Object(一個封裝數據,純粹用於傳輸的物件),一般建議

13

採用 Data Transfer Object[4]。

2.2.2 Row Data Gateway 模式

根據[13]定義:Row Data Gateway 對應資料庫中的每一筆數據記錄,

它的一個實例(instance)就是一行記錄,資料庫表格中的每一欄位映射於該物 件中相應的成員(field)。因此它是有狀態的,不像 Table Data Gateway 只是 簡單的存取介面而已。

圖 7 Row Data Gateway 模式的示意圖 [13]

通常在設計 Row Data Gateway 時,會對資料庫中的每個表格對應一個 查詢類別,用以返回一個 gateway 物件作為其查詢的結果,如圖 7 所示。

值得一提的是 Row Data Gateway 和 Active Record 模式十分類似,區別 在於其中是否包含業務邏輯(domain logic)。Row Data Gateway 只是包含數 據存取的邏輯,而沒有任何業務邏輯;而 Active Record 則包含兩者。

14

2.2.3 Active Record 模式

根據[12][13]定義:Active Record 包裝了資料庫表格或視圖中的一筆數 據記錄,不但封裝資料庫的存取行為,也加入了該筆數據的業務邏輯,如圖 8 所示。Active Record 的資料結構應該要和資料庫表格的完全匹配,每個成 員皆要對應資料庫表格中的每一個欄位。並且成員的型別要和資料庫提供的 型別保持一致,並不需要在此階段手動的進行型別轉換。

Active Record 模式通常具有下列方法[12][13]:

 透過 SQL 查詢結果建構一個 Active Record 物件

 為插入資料庫操作預先生成一個 Active Record 物件

 透過一個包含通用 SQL 查詢的靜態 Finder 方法,返回 Active Record 物 件

 通過 Active Record 物件更新和插入資料庫數據

 提供 Get/Set 成員

 可實現部分業務邏輯

圖 8 Active Record 模式的示意圖 [13]

15

在業務邏輯比較簡單並且能和資料庫表格相互對應時,使用 Active Record 模式相對於 Gateway 模式更加合適。因為它包含了業務邏輯和數據存 取能力,並且不需要 Data Transfer Object,減少了維護的工作量。不過 Active Record 對資料庫的耦合程度較高。

2.2.4 Data Mapper 模式

根據[13]定義:Data Mapper 是 ORM 物件和資料庫之間傳遞數據的一個 中間層,使兩者保持獨立,如圖 9 所示。ORM 物件可以包含資料庫數據和 業務邏輯,數據存取的邏輯由 Data Mapper 完成,這使得 ORM 物件和資料 庫可以各自使用更符合自己的方式來組織數據的資料結構。Data Mapper 模 式將 ORM 物件與資料庫之間的耦合程度降至最低,甚至讓使用者只需操作 ORM 物件,無需再知道 SQL 和實質的資料庫。

通常使用 Data Mapper 需要藉由外部的配置文件儲存 ORM 物件與資料 庫的映射關係,例如 INI 或 XML 文件。這意味著使用此模式帶來良好的彈 性之外,也增加額外的管理開銷。因此,此模式較適用於資料庫與業務邏輯 映射關係複雜的大型專案[18]。

圖 9 Data Mapper 模式的示意圖 [13]

16

表 2 將針對 Table Data Gateway 模式、Row Data Gate 模式、Active Record 模式、DataMapper 模式等四種常見的 Object Relational Mapping 模式進行比 較。

表 2 ORM 設計模式比較表 Table Data

Gateway

Row Data Gateway

Active Record

Data Mapper

複雜程度 最低 低 中 高 key 時,所產生 value 的分散程度與生成速度為考量時,選擇 DJBX33A(Daniel J. Bernstein, Times 33 with Addition)演算法是最佳的選擇。其演算法如下:

相關文件