2019独角兽企业重金招聘Python工程师标准>>>
在 PHP 领域里,有哪些 ORM 比较好用?
来源于
这几个词描述不是同一个层次的东西,没什么可比性,更谈不上异同。 在下口拙简述不能,干脆帮你找了点资料,你勉为其难多看下。
-
Model
恐怕你是在 MVC 里看到这个词的,如字面意思——模型,没什么特别的含义。
具体可参考:http://zh.wikipedia.org/wiki/MVC -
ORM (Object Relational Mapping)
关系型数据库里的数据转化为对象与对象的引用,这样就可以用面向对象的方式访问数据库了,省点脑力,增加开发效率。
具体可参考:http://zh.wikipedia.org/wiki/%E5%AF%B9%E8%B1%A1%E5%85%B3%E7%B3%BB%E6%9... -
DAO (Data Access Object)
就是在数据源(各种数据库)之上再铺一层代码,抽象出统一的接口,酱紫上层代码就不必为不同的数据源做不同的编码了。
具体可参考:http://en.wikipedia.org/wiki/Data_access_object
没图说个JB,上图:
出自 Java 的技术文档 http://www.oracle.com/technetwork/java/dataaccessobject-138824.html -
Active Record
一种 ORM 的实现方式(多谢@杨益 )。恕在下说不出其中奥妙,毕竟,是个阿猫阿狗都会习惯把数据库里一行记录当作一个可读写的实体,也许“一看就合我意”正是其奥妙本身吧。
马丁老爷的书里倒是阐述过,下方 wiki 页面里也有他博客地址。
具体可参考:http://zh.wikipedia.org/wiki/Active_Record
举个例子汇总一下这些名词的使用:
小强要开发一个应用,选择用MVC,先blabla……然后开始考虑Model
层,再blabla……具体到业务对象(business object)怎么持久,首选当然是关系型数据库,但直接写sql太费事,那就用ORM
,考虑怎么个映射法,就按Active Record
那样做吧,一表一个类,一行一对象。然后blabla……测试、修正、发布。一段时间后,需求变更,改!需要新增一个数据源(比如Memcached),卧槽,业务对象和数据源耦合住了,改个球,先重构,写几个DAO
塞进去,业务对象的数据从DAO
里获取,而DAO
来决定数据源。