The Art of Readable Code && High Performance Comments

今天看了一個下午的 Doctrine 2,總算有點心得 !

相較於 Doctrine 1 使用 Active Record (每個物件知道自己在資料庫中的位置,能呼叫 $obj->save() 回寫),Doctrine 2 改為使用 Entity Manager 來處理資料;物件不再知道自己 (與關聯) 屬於哪個表格,要透過對 em 登記自身,並且呼叫 $em->flush() 來回寫資料。雖然這對操作方式有著不小的影響,不過反正我都是要重新學習,選哪一種倒無妨。

網路上有不少校能測試,顯示 Doctrine 1 的執行效率低於 Propel 1.5,關於 Doctrine 2 的正式測試報告就沒看到啦;據稱 D2  明顯比 D1 快就是了。

經過一天的查詢,在 Doctrine 2 與 Propel 1.5 之間,我選擇了前者。原因如下:

  1. 執行效能方面,無證據說明兩者有差異
  2. 聽說 Doctrine 社群比較活躍
  3. Doctrine 的文件寫得比較好讀,也有 Tutorial 這種懶人包
  4. Doctrine 能使用 XML、yaml、 phpDocumentor 式註解描述 DB 關聯性,而 Propel 只吃 XML。恰好我用的  PHP IDE 支援 phpDocumentor 式註解
  5. D2 與 Propel 都會 (要) 實作 ORM 屬性/方法,因此對 IDE 友善;DataMapper 與 D1 則不會實作。
  6. 雖然 D2 不使用 CI::database,因此無法利用 CI::Profiler 進行分析,但他自帶 Profiler,只要在 CI 加入 hook 便能以類似方式記錄並分析,利於最佳化資料庫查詢;Propel 在這方面的資源就比較欠缺了 (我沒查到,不代表無此功能 XD)

發表迴響

分類

%d 位部落客按了讚: