« YAPC::Asia 2009 開放講者投稿與報名 | Home | YAPC::Tiny->first 開始報名 »

July 6, 2009

Data::Model

Data::Modelyappo 最近的新作品,顧名思義,它是個 ORM,就使用風格來說,與之最接近的大概是 DataMapper 與 Jifty::DBI

和目前大多數的 ORM 系統有別的,Data::Model 嘗試處理多個資料庫來源,它的處理方式是:讓每個 Model 裡面除了定義了資料庫欄位,還指定了資料庫和資料表。

直接來看個簡單的範例:
四個檔案中,Posts 和 Users 是 Model,MyApp::DB 則是一些自定義的函式,simple-create-read.pl 則建立一條資料並讀出。

Model 中主要就是兩條 DDL,首先先用 base_driver( $driver ) 指定映射的資料庫,可用的 driver 可參考 DBI 模組。目前 Data::Model 支援的資料庫則只有 MySQL 和 SQLite 兩樣。當然了,在每個 Model 中重複指定相同的 driver 是很不合乎 perl style 的,我們把他提出到 MyApp::DB 中讓 driver() 處理它。

剩下的工作和上述提到的兩個 ORM 就差不多了,install_model() 宣告這個 Model 對應的資料表名稱和 schema。columns() 可說是 Data::Model 最佳的語法糖衣,可以一口氣用預設方式宣告多個欄位,所有的欄位設定方式都寫在 Data::Model::Schema 中。

到這裡工作就差不多結束了。噢,因為 Data::Model 還是如此的年輕,所以它還沒有辦法辦到 Auto Migration。在它成長之前,我們姑且自己來作這件事,MyApp::DB::make_schema() 簡單的為我們產生最初的 schema。

最後,我們就可以和所有的 ORM 一樣來作 CRUD,如 simple-create-read.pl 最後的幾行。

Data::Model 目前的完成度還不高,關於 relation 的部份都還未實做,也還沒有 validator、hook  。不過從目前的雛型來看,潛力可期,我們可以期待 yappo 把它完成後的表現。


No TrackBacks

TrackBack URL: http://chupei.pm.org/mt/mt-tb.cgi/580

Leave a comment

Pages

OpenID accepted here Learn more about OpenID

About this Entry

This page contains a single entry by shelling published on July 6, 2009 5:02 PM.

YAPC::Asia 2009 開放講者投稿與報名 was the previous entry in this blog.

YAPC::Tiny->first 開始報名 is the next entry in this blog.

Find recent content on the main index or look in the archives to find all content.