DAL、DAO、ORM、Active Record辨析

模型 Model

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

持久层Persistence

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

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

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

DAL  Data Access Layer,数据访问层

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

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

使用DAL的优势如下:

1、开发人员可以只关注整个结构中的其中某一层;

2、可以很容易的用新的实现来替换原有层次的实现;

3、可以降低层与层之间的依赖;

4、有利于标准化;

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

概括来说,分层式设计可以达至如下目的:分散关注、松散耦合、逻辑复用、标准定义。

降低耦合性的实际应用如下:

业务逻辑不必管数据访问层具体是什么技术来实现的,接口是不变的,数据访问层可以用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快速开发。

### 回答1: biz daldao 是软件开发中常见的层级结构,用于将代码按照不同的功能和责任进行划分和组织。 biz(Business)层表示业务逻辑层,主要负责处理业务逻辑相关的操作和功能。在这一层中,开发人员会定义和实现业务实体、业务逻辑以及业务规则。biz层关注的是业务的具体实现细节,通过调用dal层提供的数据访问方法来操作数据库,完成业务逻辑的处理和计算,并将结果返回给上层。通过将业务逻辑与其他层进行分离,biz层使得系统的业务逻辑更加清晰和可维护。 dal(Data Access Layer)层表示数据访问层,主要负责与数据库进行交互,提供数据的增删改查功能。dal层是对数据库操作的封装,通过提供统一的接口和方法,使得上层可以方便地直接调用来访问和操作数据库中的数据。dal层封装了具体数据库的访问细节,包括连接数据库、执行SQL语句以及处理数据库事务等。通过将数据访问与业务逻辑分离,dal层使得数据库操作的代码重用性更高,同时也提高了系统的安全性和可扩展性。 dao(Data Access Object)即数据访问对象,是dal层的一种具体实现方式。dao对象主要负责封装对数据库的访问操作,提供CRUD(增删改查)等基本的数据库操作方法。dao层可以对数据库进行封装,屏蔽底层数据库的差异,使得上层业务模块可以以统一的方式访问不同类型的数据库dao层还可以通过使用缓存技术等对数据库进行性能优化。通过使用dao对象,可以更好地组织和管理数据访问的代码,提高代码的重用性和可维护性。 总之,biz层、dal层和dao层都是软件开发中常用的层级结构,通过将不同的功能和责任进行分离和封装,可以提高代码的可维护性、可重用性和可扩展性。 ### 回答2: biz、daldao是一种常见的软件架构设计中的层级结构。它们代表了不同的职责和功能,用于实现系统的分层、解耦和易于维护。 biz层是业务逻辑层,主要负责实现系统的业务规则和业务流程。在这一层中,我们可以定义各种业务逻辑的处理,如数据处理、算法实现、工作流程控制等。biz层是整个系统的核心业务逻辑所在,其职责包括数据的处理、转换、验证等。它与用户的交互是通过控制层进行的,它们之间通过接口进行通信。 dal层是数据访问层,负责与数据库进行交互,实现数据的增删改查等基本操作。在dal层中,我们可以定义各种访问数据的方法,如连接数据库、执行SQL语句等。dal层的主要职责是封装数据库相关的操作,为biz层提供数据的存取能力。通常,dal层会处理数据的连接和事务管理,保证数据的一致性和完整性。 dao层是数据访问对象层,是在dal层基础上进一步抽象和封装的层次。在dao层中,我们可以定义数据对象的接口和实现,用于封装与数据库的交互细节。dao层的主要职责是提供简单、高效、易用的数据访问接口,为biz层提供数据的操作能力。通过dao层,biz层可以实现与各种不同类型的数据库(如关系型数据库、NoSQL数据库等)交互的透明性。 综上所述,biz、daldao的层级结构中,biz层为整个系统的业务逻辑层,dal层为数据访问层,dao层为数据访问对象层。它们之间明确了职责和功能,实现了系统的分层、解耦和易于维护。这种层级结构在项目开发中广泛应用,可以提高代码的可维护性和重用性,同时也方便了团队的协作和开发效率。 ### 回答3: Biz(业务逻辑层)和DAO(数据访问对象)是在软件开发中常用的两个层级,主要用于在应用程序中分离不同的职责和功能。它们之间的层级结构可以简单概括为: DAO层是在数据持久化方面负责与数据库进行交互的部分。它封装了与数据库相关的操作,提供了对数据的持久化和访问的方法。DAO层通常包含了数据的增删改查等基本操作,以及一些复杂的查询和事务处理。在DAO层的设计中,我们通常会使用一些持久化框架(如Hibernate、MyBatis等)来简化与数据库的交互。 Biz层是在业务逻辑方面负责处理具体的业务需求。它通过调用DAO层提供的数据访问方法,实现对数据的操作和处理。Biz层相当于对DAO层进行了一层封装,将数据访问的逻辑与业务逻辑进行了解耦,使得应用程序更加灵活和可维护。在Biz层的设计中,我们通常会对业务进行划分,并实现相应的业务功能方法。这些方法可以包含多个DAO层的数据访问操作,以完成具体业务逻辑的处理。 所以,biz和dao的层级结构一般是DAO层处于底层,负责与数据库进行数据的持久化和访问;而Biz层处于顶层,负责处理具体的业务逻辑需求,通过调用DAO层提供的数据访问方法,实现对数据的操作和处理。通过这种层级结构的划分,可以使应用程序的不同层级职责清晰分离,降低耦合度,提高代码的复用性和可维护性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值