跳至內容

主動記錄

出自Taiwan Tongues 台語維基
這是此頁批准,以及是最近的修訂。

佇咧軟體工程內底,主動記錄模式(active record pattern)是一種模式,可見佇咧關聯式資料庫當中儲存記持體中物件的軟體當中。伊佇咧 Martin Fowler 的二空空三年就著《企業應用架構的模式》冊中號名。符合這个模式的物件的介面將包括函式譬如講插入去、閣較新佮刪除,加上直接對應該佇底層的資料庫表格中列的抑是濟抑是少的屬性。

主動記錄模式是存取佇資料庫中的資料的一種方式。資料庫表抑是視圖予包裝入類。所以,物件實例予人連結到這个表格的一个單一行。佇咧一个物件建立了後,阮的儲存的時陣會有一个新的行增加到表格內底。載入的任何物件攏對資料庫得著伊的資訊。佇一个物件予人更新的時陣,佇表格中對應的行嘛是予人更新。包裝類做佇表格抑是視圖內底的逐个列攏實現存取器方法抑是屬性。

這个模式定定用佇物件維持久化這个工具佮物件關係對映(ORM)之中。典型的,外來鍵聯絡嘛通過一个屬性啊若予顯露做適當的一个物件實例。

實現

這个概念的實現會當佇濟濟編程環境中的各種框殼內底揣著。比如講,若是佇資料庫內底有一个表格 ` parts `,伊有列 ` name `(字串類型)和 ` price `(數值類型), 主動記錄模式用類 ` Part ` 來實現,偽碼為:

` ` ` part=new Part ( ) part . name=" Sample part " part . price=一百二十三分四五 part . save ( ) ` ` `

伊佇咧 ` parts ` 表格中建立有予定值的一个新行,並且粗略的等價數 SQL 命令:

顛倒反,這个類會當予人用來查詢這个資料庫:

` ` ` b=Part . find _ first ( " name " , " gearbox " ) ` ` `

這會揣著一个新 ` Part ` 東西,是因為佇咧 ` parts ` 格中其實 ` name ` 列的值為 ` " gearbox " ` 的第一个匹配行。使用的 SQL 命令可能類似下跤所列,具體依賴佇這个資料庫的 SQL 實現細節:

主動的記錄框殼

主動記錄框架一般兼有 ORM 框架的功能,但主動記錄毋是簡單的 ORM。關係型資料庫往往過通過外來鍵來表示實體的聯絡,主動記錄佇資料來源層面上嘛共這款聯絡對映為物件的關聯佮聚集。出名的例是解決方案疊起來 Web 開發框殼 Ruby on Rails,其預設使用一个純 Ruby 寫做主動的記錄框殼來驅動 MVC 中的模型層。此外閣有:

  • SQLObject,Python
  • Orator,Python
  • Yii Framework ActiveRecord,PHP
  • Castle ActiveRecord,. NET
  • ActiveJDBC,Java
  • ObjectiveSql,Java
  • JFinal,Java

類似模式

主動記錄佮行資料門徑十分相𫝛,但是進前的人是領域模型的模式,後者只是一種資料來源模式。主動記錄適合非常簡單的領域需求,尤其佇咧領域模型佮資料庫模型誠相𫝛的情況下。若拄著閣較複雜的領域模型結構(譬如講用著繼承、策略的領域模型), 往往需要使用分離資料來源的領域模型,結合資料對映器使用。

資料來源

外部連結

  • Martin Fowler 著 Active Record 的定義