DAL、DAO、ORM、Active Record辨析

转自:http://blog.csdn.net/suiye/article/details/7824943sql

模型 Model数据库

模型是MVC中的概念,指的是读取数据和改变数据的操做(业务逻辑)。一开始咱们直接把和数据库相关的代码放在模型里(sql直接写在代码中),这样就会致使之后的维护至关麻烦。业务逻辑的修改都须要开发者从新写sql,若是项目须要分库,须要将sql语句抽出来,放到单独的一层。这一层就是DAL(数据访问层)。ruby

持久层Persistence架构

持久层只是一个逻辑概念而已,主要任务是负责把数据保存起来,通常是指保存至数据库或者文件,也能够负责完成与之相关的行为。app

持久层指的是把数据长期保存起来,如数据库把数据长期保存在硬盘里,XML也能够长期保存数据,还有若是把数据存放到指定文件中,也能够成为持久层。框架

持久化能够理解为动词。Java中的Hibernate作的就是持久化的操做,主要是对数据库底层的OR映射,这样咱们就没必要关心讨厌的关系映射了,直接操做对象就能够了。工具

DAL  Data Access Layer,数据访问层网站

DAL是三层架构(表现层,业务逻辑层,数据访问层)中的数据访问层,是一个概念或者说是一个方案,它由许多DAO组成,或者说由DAO具体实现,是把和数据库相关的代码封装起来,这样当咱们执行分库时,便只用调整DAO的代码了,模型根本不用关心它使用的数据是放在A库仍是B库。ui

设计数据访问层接口的目的是让业务逻辑层不去调用具体的数据访问层的实现(不依赖于数据访问层具体的实现技术),这样的好处是,业务逻辑没必要管数据访问层具体是什么技术来实现的,接口是不变的。.net

使用DAL的优点以下:

一、开发人员能够只关注整个结构中的其中某一层;

二、能够很容易的用新的实现来替换原有层次的实现;

三、能够下降层与层之间的依赖;

四、有利于标准化;

五、利于各层逻辑的复用。

归纳来讲,分层式设计能够达至以下目的:分散关注、松散耦合、逻辑复用、标准定义。

下降耦合性的实际应用以下:

业务逻辑没必要管数据访问层具体是什么技术来实现的,接口是不变的,数据访问层能够用jdbc来实现,也能够用hibernate来实现,并且更换起来不是很是麻烦,这样耦合就下降了

DAO data access object,数据访问对象

DAO是一个软件设计的指导原则,在核心J2EE模式中是这样介绍DAO模式的:为了创建一个健壮的J2EE应用,应该将全部对数据源的访问操做抽象封装在一个公共API中。用程序设计的语言来讲,就是创建一个接口,接口中定义了此应用程序中将会用到的全部事务方法。在这个应用程序中,当须要和数据源进行交互的时候则使用这个接口,而且编写一个单独的类来实现这个接口在逻辑上对应这个特定的数据存储。

顾名思义就是与数据库打交道,夹在业务逻辑与数据库资源中间,是DAL的具体实现。

简单的说 dao层 就是对数据库中数据的增删改查等操做封装在专门的类里面,在业务逻辑层中若是要访问数据的时候,直接调用该dao类(包括了如何访问数据库和数据的增删改查等等代码),就能够返回数据,而不须要再在业务逻辑层中写这些代码。

ORM object-relational mapping,对象关系映射

ORM也是一种对数据库访问的封装,然而ORM不像DAO只是一种软件设计的指导原则,强调的是系统应该井井有条,更像是一种工具,有着成熟的产品,好比JAVA界很是有名的Hibernate,以及不少PHP框架里自带的ORM库。他们的好处在于能将你程序中的数据对象自动地转化为关系型数据库中对应的表和列,数据对象间的引用也能够经过这个工具转化为表之间的JOIN。使用ORM的好处就是使得你的开发几乎不用接触到SQL语句。建立一张表,声明一个对应的类,而后你就只用和这个类的实例进行交互了,至于这个对象里的数据该怎么存储又该怎么获取,统统不用关心。

Active Record

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

下面内容摘自ThinkPHP手册

遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,可以很大程度的快速实现模型的操做,并且简洁易懂。

ActiveRecord的主要思想是:

1. 每个数据库表对应建立一个类,类的每个对象实例对应于数据库中表的一行记录;一般表的每一个字段在类中都有相应的Field;

2. ActiveRecord同时负责把本身持久化,在ActiveRecord中封装了对数据库的访问,即CURD;

3. ActiveRecord是一种领域模型(Domain Model),封装了部分业务逻辑;

ActiveRecord比较适用于:

1. 业务逻辑比较简单,当你的类基本上和数据库中的表一一对应时, ActiveRecord是很是方便的,即你的业务逻辑大多数是对单表操做;

2. 当发生跨表的操做时, 每每会配合使用事务脚本(Transaction Script),把跨表事务提高到事务脚本中;

3. ActiveRecord最大优势是简单, 直观。 一个类就包括了数据访问和业务逻辑. 若是配合代码生成器使用就更方便了;

这些优势使ActiveRecord特别适合WEB快速开发。

相关文章
相关标签/搜索