PHP ORM 收集

Propel

http://propel.phpdb.org/

Propel是一個基於Apache Torque的對象持久層,需要PHP5支持.實際上,它讓你使用 對象 代替SQL 來讀寫數據庫表中的記錄.它提供了一個生成器來創建基於你的數據模型的SQL定義文件和相應的類文件,並有一個運行時引擎透明的處理對象持久和獲取工作.如果要定製生成的類將是很簡單的事情,XML, PHP類 和Phing構建工具使得把Propel集成到已有的應用程序框架也相當的容易.
Propel算是PHP中對ORM的實現,並且用到它的兄弟項目Creole作爲數據抽象層.

它的核心思想是:通過 XML 格式的模式文件和相應的配置文件來生成SQL和類, 在數據庫抽象的基礎上,  更近一步,它"隱藏"了數據庫,使得WEB開發人員專注於業務邏輯上.
實踐:著名PHP框架 symfony使用了精簡版的Propel.
相關:PEAR DB_DataObject是另一個輕型的ORM實現,不過它的數據庫抽象層使用的是 PEAR DB.

EZPDO

http://www.ezpdo.net

EZPDO 是一個輕量級的PHP ORM框架。旨在降低複雜的學習曲線,維持一個相當的運行速度和提供儘可能強大的功能。不過作者更新比較慢。好幾個月才能更新一個小版本。

以下引用自官方網站 

Features  特性

Here is a quick look at the features in EZPDO before you delve into any details.

  • Minimum SQL knowledge required
  • 儘可能的SQL透明
  • Requires minimum ORM specification
  • 最小化的ORM配置
  • No Phing! No need of explicit command line compile
  • 不需要複雜的命令行操作
  • Works with existing code and database
  • 工作在已有的數據庫和代碼的基礎上
  • Has a small runtime core to guarentee performance
  • 有一個小的運行時核心以提高性能
  • Handles 1:N, and M:N relationships automatically
  • 可以自動處理1:N,M:N 的關係
  • Provides a simple runtime API
  • 提供一個簡單易懂的運行時API
  • Supports object query (EZOQL)
  • 支持對象查詢(EZOQL)        注: 仿照 Hibernate 的 HQL 起的名字,貌似未完全實現
  • Auto generates database tables
  • 自動生成數據庫表
  • Test-driven with continuous integration
  • 持續集成的測試驅動

 

Licence

EZPDO is an open source project and uses the BSD license.

BSD協議意味着你可以自由的使用,修改該軟件源碼,需要在你發佈的源碼包中包含BSD協議或者註明。

 ORM in Frameworks

許多開發框架都對ORM有實現。

Picora  提供了一個類 ActiveRecord 的實現,同時提供了一個緩存和序列化的實現。當前的版本是 0.4 版。

ThinkPHP 是國內鼎鼎大名的PHP開源框架之一,在模板引擎上模仿了 Struts 。它提供了名爲 VO ( ValueObject )  的 ORM 實現,由於沒有看過源碼,從使用方式上看,它的實現和 ezpdo 有一定類似之處。

FleaPHP 是國內另外一個著名的PHP開源框架,作者廖宇雷大俠(dualface),脾氣火暴。它提供了TableGateWay方式的 ORM 實現。

Zend Framework (ZF) 是 PHP 老母 Zend 公司的傑作,目前已經公佈了 1.0 production 版,除了提供對 SQL 語句的封裝以外,也同樣實現了 TableGateway 、 TableRowSet  、 TableRow 的實現。

總結

從功能上講,不管是 ActiveRecord 模式,還是 TableGateway ,對付簡單的查詢的確是可以降低開發難度,提高開發效率;但是它們對複雜關聯、SQL內嵌表達式的處理都不好。另外,由於php的對象持久化功能較弱,導致ORM的速度令人不敢恭維,測試結果普遍大約比Native SQL 慢10~50倍。

在大型項目中,期望使用ORM ,但是有可能出現的複雜情況讓我對 ORM 心存恐懼。如果強制使用 Pure SQL 很有可能會帶來數據緩存的衝突和 ORM 內部關聯的破壞。

這些讓我感到很失望,RDBMS 難道果真不是爲了OO設計的。沒有仔細的看過Hibernate ,不知道Hibernate的處理究竟有多強,但Hibernate 那繁雜的配置文件讓人望而生畏,我想這同樣不是ORM的真諦。

Django 中的 Models 模型雖然功能要比 Python 中最強大的 SQLAlchemy差一些,而且寫法也有些類似ZF中的db_select 但是藉於Python強大的自省功能, Django 的 Models 仍然是一個寫法優美、易於使用的ORM 。粗略得想,我認爲把 Django的 ORM 移植到 PHP 不會是很難的事情,但目前的我做到這點還有很大差距,所以期望有心人可以做這麼一次有益的嘗試。

發佈了40 篇原創文章 · 獲贊 1 · 訪問量 8萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章