PHP ORM 收集

來源:互聯網
上載者:User
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 不會是很難的事情,但目前的我做到這點還有很大差距,所以期望有心人可以做這麼一次有益的嘗試。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.