Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發 >> 關於android開發 >> ActiveRecord模式整理,activerecord模式

ActiveRecord模式整理,activerecord模式

編輯:關於android開發

ActiveRecord模式整理,activerecord模式


DAO Data Access Object,數據訪問對象

DAO是一個軟件設計的指導原則,在核心J2EE模式中是這樣介紹DAO模式的:為了建立一個健壯的J2EE應用,應該將所有對數據源的訪問操作抽象封裝在一個公共API中。用程序設計的語言來說,就是建立一個接口,接口中定義了此應用程序中將會用到的所有事務方法。在這個應用程序中,當需要和數據源進行交互的時候則使用這個接口,並且編寫一個單獨的類來實現這個接口在邏輯上對應這個特定的數據存儲。

簡單的說,DAO就是對數據庫中數據的增刪改查等操作封裝在專門的類裡面,在業務邏輯層中如果要訪問數據的時候,直接調用該DAO類(包括了如何訪問數據庫和數據的增刪改查等等代碼),就可以返回數據,而不需要再在業務邏輯層中寫這些代碼。

ORM概念

面向對象的開發方法是當今企業級應用開發環境中的主流開發方法,關系數據庫是企業級應用環境中永久存放數據的主流數據存儲系統。

在業務邏輯層和用戶界面層中,我們是面向對象的。當對象信息發生變化的時候,我們需要把對象的信息保存在關系數據庫中。

當你開發一個應用程序的時候(不使用O/R Mapping),你可能會寫不少數據訪問層的代碼,用來從數據庫保存,刪除,讀取對象信息,等等。你在DAL中寫了很多的方法來讀取對象數據,改變狀態對象等等任務。而這些代碼寫起來總是重復的。

面向對象是從軟件工程基本原則(如耦合、聚合、封裝)的基礎上發展起來的,而關系數據庫則是從數學理論發展而來的,兩套理論存在顯著的區別。為了解決這個不匹配的現象,對象-關系映射(Object/Relation Mapping,簡稱ORM)技術應運而生。

對象和關系數據是業務實體的兩種表現形式,業務實體在內存中表現為對象,在數據庫中表現為關系數據。內存中的對象之間存在關聯和繼承關系,而在數據庫中,關系數據無法直接表達多對多關聯和繼承關系。因此,對象-關系映射(ORM)系統一般以中間件的形式存在,主要實現程序對象到關系數據庫數據的映射。

對象關系映射(ORM)提供了概念性的、易於理解的模型化數據的方法。ORM方法論基於三個核心原則:

典型地,建模者通過收集來自那些熟悉應用程序但不熟練的數據建模者的人的信息開發信息模型。建模者必須能夠用非技術企業專家可以理解的術語在概念層次上與數據結構進行通訊。建模者也必須能以簡單的單元分析信息,對樣本數據進行處理。ORM專門被設計為改進這種聯系。

ORM不是DAO這樣的指導原則,它往往依賴一個具體的庫實現。一般的ORM包括以下四部分:

ORM 類型

1. ActiveRecord

軟件工程中,Active Record(簡稱AR)模式是軟件裡的一種架構性模式,主要概念是關系型數據庫中的數據在內存中以對象的形式存儲。由Martin Fowler在其2003年初版的書籍《Patterns of Enterprise Application Architecture》命名。遵循該模式的對象接口一般包括如Insert, Update, 和 Delete這樣的函數,以及對應於底層數據庫表字段的相關屬性。

AR模式是一種訪問數據庫數據的方式。數據表或視圖被映射成一個類。每個對象實例則對應於表的一條記錄。對象被創建後,通過save就可以向表中新添一行記錄。當對象被更新時,表中相應記錄也被更新。這個包裹類通過屬性或方法的形式實現訪問表或視圖中的每一個字段。

該模式主要被對象持久化工具采用,用於對象關系映射 (ORM). 典型的,外鍵關系會以合適的對象實例屬性的形式暴露訪問。

2. Row Data Gateway

Row Data Gateway模式中每個對象也封裝了數據庫記錄的狀態和持久化到數據庫的訪問方法; 這兩個有時候很難區分. 細微的區別在於Row Data Gateway不封裝任何業務邏輯;

3. TableGateway

TableGateway是一種數據訪問模式, 對每個表有一個類, 類的方法封裝了對單個表的數據操作, 如CRUD; 方法的接受表字段的值作為參數;

比如說對表Person有Person DAO, 有以下方法:

int Create(string name, bool isMale)
DataSet Find(int personId)
void Delete(int personId)
void Update(int personId, string name, bool isMale)

微軟的很多代碼示例中使用了此模式;

ActiveRecord的區別在於ActiveRecord的對象中保持了記錄的值, 是有狀態的, 而TableGateway是沒有狀態的, 只是一系列數據庫訪問方法的集合;

Table Module

Table Module是一種領域邏輯模式, 一個類對應於數據庫中的一個表; Table Module通常和Table Gateway合作, 前者負責基本的業務邏輯, 後者負責數據庫訪問, 以達到邏輯層和持久化層的隔離; 微軟的實例代碼經常使用這兩者, 如對表Person, 通常會定義兩個類, PersonBL和PersonDB, 在PersonBL中處理驗證等邏輯, 並調用PersonDB訪問數據庫, 層間調用使用DataSet或自定義數據傳輸對象傳輸數據

在業務邏輯比較簡單並且有和表的一一對應時, ActiveRecord相對來說更簡單, 因為它在一個類中包括了業務邏輯對象和數據訪問, 而且不需要數據傳輸對象, 減少了維護的工作量;和Table Module比較起來, ActiveRecord與數據庫耦合更緊。


  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved