发新话题
打印

PHP ORM 收集

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.
相关EAR 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 不会是很难的事情,但目前的我做到这点还有很大差距,所以期望有心人可以做这么一次有益的尝试。
努力为phpres做贡献
时刻准备着,当机会来临时你就成功了
打好基础,增加社会经验
资深技术工程师是我的梦想
承接各种团体网站外包服务和各种it技术培训
准备申请AJAX版大,希望大家支持~~

TOP

理解
爱上PHP,便拥有了更多的动力!

TOP

发新话题