日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ActiveRecord模式整理

發布時間:2024/7/19 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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包括以下四部分:

  • 一個對持久類對象進行CRUD操作的API;
  • 一個語言或API用來規定與類和類屬性相關的查詢;
  • 一個規定mapping metadata的工具;
  • 一種技術可以讓ORM的實現同事務對象一起進行dirty checking, lazy association fetching以及其他的優化操作。
  • 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與數據庫耦合更緊。

    轉載于:https://www.cnblogs.com/x3d/p/6250560.html

    總結

    以上是生活随笔為你收集整理的ActiveRecord模式整理的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。