`

浅谈model, orm, dao和active record的区别

阅读更多
在做web开发中,经常会碰到这样几个概念:

    Model
    DAO,data access object,数据访问对象
    ORM,object-relational mapping,对象关系映射
    Active Record

这些概念都是和数据相关的,然而他们之间有怎样的区别呢?

首先来看Model,模型。模型是MVC中的概念,指的是数据和改变数据的操作(业务逻辑)。模型通常指代现实生活中的某样实体。以订单为例,每个订单都包含许多数据,如客户、价格、明细等等,这些数据都叫做订单这个模型的属性,此外,和订单相关的一些列操作,比如当购买时,你可能需要先检查库存,给与一定的优惠,再更新账户余额和积分等等,这些就叫做业务逻辑,也是模型的一部分,从代码上来讲,是要放在模型中的。

当模型执行完业务逻辑后,我们便要把模型中的数据保存到数据库中。如果我们直接把和数据库相关的代码放在模型里,会使得以后的维护相当的麻烦。在我之前的一个项目中,我们用户的增长相当快,导致一台数据库无法支撑所有的访问,不得不使用分库来解决问题。然而前人把SQL语句直接写在了模型这一层里,这导致分库相当的麻烦,我们只能先把这些SQL语句抽出来,才能把分库进行下去。我们把这些抽出来的SQL代码放到单独的一层,这一层便是DAL,Data Access Layer,数据访问层,它由许多DAO组成,目的便是把和数据库相关的代码封装起来,这样当我们执行分库时,便只用调整DAO的代码了,模型根本不用关心它使用的数据是放在A库还是B库。

DAO其实是来源于J2EE的一个设计模式,当初的目的也是使得企业更换数据库时,不用影响模型层的代码。

与DAO类似,ORM也是一种封装数据访问的概念。然而ORM不像DAO只是一种软件设计的指导原则,强调的是系统应该层次分明。ORM更像是一种工具,有着成熟的产品,比如JAVA界非常有名的Hibernate,以及很多PHP框架里自带的ORM库。他们的好处在于能将你程序中的数据对象自动地转化为关系型数据库中对应的表和列,数据对象间的引用也可以通过这个工具转化为表之间的join,而Hibernate甚至提供一套他们自己的数据查询语言HQL来解决复杂的查询问题。

使用ORM的好处就是使得你的开发几乎不用接触到SQL语句。创建一张表,声明一个对应的类,然后你就只用和这个类的实例进行交互了,至于这个对象里的数据该怎么存储又该怎么获取,通通不用关心。

Active Record则是随着ruby on rails的流行而火起来的一种ORM模式,它是把负责持久化的代码也集成到数据对象中,即这个数据对象知道怎样把自己存到数据库里。这与以往的ORM有不同,传统的ORM会把数据对象和负责持久化的代码分开,数据对象只是一个单纯包含数据的结构体,在模型层和ORM层中传递。而在Active Record中,模型层集成了ORM的功能,他们既代表实体,包含业务逻辑,又是数据对象,并负责把自己存储到数据库中,当然,存储的这一部分代码是早已在模型的父类中实现好了的,属于框架的一部分,模型只需简单的调用父类的方法来完成持久化而已。
分享到:
评论

相关推荐

    Laravel开发-model

    总之,Laravel的Model是强大的数据库操作工具,它结合了ORM的便利性和Active Record的设计思想,让开发者能以简洁、优雅的方式处理数据库交互。通过深入理解和熟练应用,可以极大地提高开发效率并提升代码质量。在...

    Yii框架文档(2010.7.18)

    此外,应用开发涉及数据库的访问和操作,包括使用数据访问对象(DAO)和Active Record。 ### 使用表单 Yii提供了CActiveForm来简化表单的创建和处理。通过CActiveForm,开发者可以创建更具有验证性的表单,并支持...

    Working with Database(数据库开发工作).docx

    除了DAO,Yii还引入了Active Record(AR)模式,这是一种广泛使用的对象关系映射(ORM)技术。在AR中,每个类对应数据库中的一个表,每个类实例代表表中的一行数据。AR极大地简化了CRUD操作,自动处理大部分SQL语句的...

    jfinal-2.2_demo

    3. **数据库操作**:JFinal 提供了基于 Active Record 模式的数据库操作,使得 CRUD(创建、读取、更新、删除)操作变得简单直观。 4. **模板引擎支持**:JFinal 支持多种模板引擎,如 Beetl、FreeMarker 和 JSP,...

    phalcon文档附中文笔记

    在模型层,Phalcon提供了Active Record和DAO两种方式与数据库交互,让你可以方便地执行SQL语句或进行ORM操作。 另外,Phalcon的性能优化是其一大亮点,比如使用预编译的视图(Volt)可以显著提升模板渲染速度。还有,...

    ThinkPHP 最全的手册

    - ORM 支持:使用 Active Record 模式,简化 SQL 操作,支持自动完成、关联查询等。 - 数据库迁移:通过数据库迁移工具管理数据库结构变化,确保开发环境与生产环境的一致性。 4. **模型与数据对象(DAO)** - ...

    gamma_Framework_

    2. ORM(对象关系映射):Phalcon的Active Record和DAO(数据访问对象)组件提供了强大的数据库操作能力,简化了数据库操作,支持多种数据库系统,如MySQL、PostgreSQL等。 3. 微框架模式:除了完整的MVC结构,...

    Yii 1.1 Application Development Cookbook.pdf

    数据访问对象 (DAO) 和活动记录 (Active Record) - **DAO 概念**:提供了一种将数据操作与业务逻辑分离的方式。 - **Active Record**:实现了对象关系映射 (ORM),简化了数据库操作过程。 ##### 5. 安全性增强 - *...

    Yii2中文手册(中文教程完整版)

    编撰中 活动记录(Active Record) - 活动记录对象关系映射(ORM),检索和操作记录、定义关联关系 编撰中 数据库迁移(Migration) - 在团体开发中对你的数据库使用版本控制 待定中 Sphinx 待定中 Redis 待定中 ...

    原创MVC框架----Smart

    模型层通过数据访问对象(DAO)或者活性记录(Active Record)模式来与数据库交互,确保了业务逻辑与展示层的分离。 二、视图(View) 视图是Smart MVC中的用户界面部分,主要负责数据的呈现。开发者可以使用HTML...

    bth-mvc-framework:bth课程mvc

    5. **数据库访问对象(DAO)/活跃记录(Active Record)**:提供与数据库交互的简便方式。 6. **中间件**:允许在请求处理流程中插入自定义逻辑,如认证、日志等。 7. **服务提供者和服务容器**:管理和注入依赖,...

Global site tag (gtag.js) - Google Analytics