关于Active Record

3. Active Record(活动记录模式) Active Record(活动记录)定义:在计算机领域中,表示编译器为每个被激活的函数分配的内存空间。 活动记录一般都存在栈中。因为栈结构比较简单,硬件能够支持。Active Record(中文名:活动记录)是一种领域模型模式,特点是一个模型类对应关系型数据库中的一个表,而模型类的一个实例对应表中的一行记录。 Active Record 和 Row Gateway (行记录入口)十分相似,但前 阅读详情
ActiveRecord是什么:
1. 每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field;
2. ActiveRecord同时负责把自己持久化. 在ActiveRecord中封装了对数据库的访问, 即CRUD; 
3. ActiveRecord是一种领域模型(Domain Model), 封装了部分业务逻辑;

ActiveRecord不是什么:
1. Row Data Gateway
Row Data Gateway模式中每个对象也封装了数据库记录的状态和持久化到数据库的访问方法; 这两个有时候很难区分. 细微的区别在于Row Data Gateway不封装任何业务逻辑;

2. TableGateway
TableGateway是一种数据访问模式, 对每个表有一个类, 类的方法封装了对单个表的数据操作, 如CRUD; 方法的接受表字段的值作为参数;
比如说对表Person有DAOPerson, 有以下方法:
int Create(string name, bool isMale)
DataSet Find(int personId)
void Delete(int personId)
void Update(int personId, string name, bool isMale)
微软的很多代码示例中使用了此模式;

ActiveRecord的区别在于ActiveRecord的对象中保持了记录的值, 是有状态的, 而TableGateway是没有状态的, 只是一系列数据库访问方法的集合;

3. Table Module
Table Module是一种领域逻辑模式, 一个类对应于数据库中的一个表; Table Module通常和Table Gateway合作, 前者负责基本的业务逻辑, 后者负责数据库访问, 以达到逻辑层和持久化层的隔离; 微软的实例代码经常使用这两者, 如对表Person, 通常会定义两个类, PersonBL和PersonDB, 在PersonBL中处理验证等逻辑, 并调用PersonDB访问数据库, 层间调用使用DataSet或自定义数据传输对象传输数据

在业务逻辑比较简单并且有和表的一一对应时, ActiveRecord相对来说更简单, 因为它在一个类中包括了业务逻辑对象和数据访问, 而且不需要数据传输对象, 减少了维护的工作量;
和Table Module比较起来, ActiveRecord与数据库耦合更紧;

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

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

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

4. 这些优点使ActiveRecord特别适合web快速开发, 而正是快速开发框架ROR采用了ActiveRecord, 并且很多类ROR框架如Castle的纷纷效仿才使ActiveRecord重新进入大家视线; 
我想这也是为什么Martin Fowler在PoEAA中早就提出了这个模式, 但是直到最近两三年ActiveRecord才热起来可能就是这个原因;

ActiveRecord不适合于
1. ActiveRecord虽然有业务逻辑, 但基本上都是基于单表的. 跨表逻辑一般会放到当发生跨表的操作时, 往往会配合使用事务脚本(Transaction Script)中. 如果对象间的关联越来越多, 你的事务脚本越来越庞大, 重复的代码越来越多, 你就要考虑Domain Model + O/R Mapper了;

2. ActiveRecord保存了数据, 使它有时候看上去像数据传输对象(DTO). 但是ActiveRecord有数据库访问能力, 不要把它当DTO用. 尤其在跨越进程边界调用的时候, 不能传递ActiveRecord对象;


来自:http://www.cnblogs.com/kuber/archive/2008/05/09/1188463.html

活动记录 Active Record AR提供了一个面向对象的接口, 用以访问数据库中的数据。声明 AR 类要想声明一个 AR 类,你需要扩展 yii\db\ActiveRecord 基类, 并实现 tableName 方法,返回与之相关联的的数据表的名称。如果包含表前缀就使用{{%tableName}}的方式。访问列数据AR访问数据就像访问public的属性一样,不过源码层面并不是public的。建立数据库连接AR 用一个 yii\d 阅读详情

相关推荐

深入理解Active Record的设计与机制

本文将探讨Ruby on Rails框架中的Active Record组件,这是一个将Ruby对象映射到数据库记录的库。通过分析Active Record的高层设计和源代码,我们将了解其内部结构,以及如何通过模块化和自动加载机制实现对象关系映射。同时,文章也将介绍Active Record如何通过元编程技术扩展功能,以及这种设计对开发者和库维护者的影响。

weixin_35835030的博客 781

Active Record 设计模式原理及简单实现

Active Record 设计模式原理及简单实现 概述 本文简要介绍Active Record 设计模式。Active Record 是一种数据访问设计模式,它可以帮助你实现数据对象Object到关系数据库的映射。 应用Active Record 时,每一个类的实例对象唯一对应一个数据库表的一行(一对一关系)。你只需继承一个abstract Active Record 类就可以使用该设计模

樊恒光的博客 1万+

深入理解Active Record的设计与实现

Active Record是Rails框架中用于对象关系映射(ORM)的核心组件,它将Ruby对象映射到数据库记录。本文通过分析Active Record的源代码结构,探讨了其设计原理和模块化扩展方式,揭示了Active Record如何通过自动加载机制和元编程技术来实现功能的动态组合,并从中学到了面向对象设计中的一些宝贵经验。

weixin_42518334的博客 939

Active Record

//the Active Record pattern is the simplest of the database-related design patterns. The //Active Record pattern embeds the knowledge of how to interact with the database directly into the class perf

robert198837的专栏 336

active_record_tracer:追踪Active Record查询,提升应用性能

active_record_tracer:追踪Active Record查询,提升应用性能 在开发过程中,我们经常会遇到应用性能问题,特别是在处理大量数据库查询时。如何定位哪些查询导致了性能瓶颈?active_record_tracer正是为此而生。 项目介绍 active_record_tracer是一个用于追踪Active Record查询的工具。通过这个工具,你可以轻松地检测到哪些查询被执行...

gitblog_00702的博客 834

DAL、DAO、ORM、Active Record讲解

目录模型(Model)持久层(Persistence)DAL(Data Access Layer,数据访问层)DAO(Data Access Object,数据访问对象)ORM(Object/Relational Mapping,对象-关系映射)NHibernateActive Record 模型(Model) 模型是MVC中的概念,指的是读取数据和改变数据的操作(业务逻辑)。一开始我们直接把和数据库相关的代码放在模型里(sql直接写在代码中),这样就会导致以后的维护相当麻烦。业务逻辑的修改都需要开发者重新

啊晨 1403

Active Record回调

Active Record回调 可用的回调 创建对象时:before_validation, after_validation, before_save, around_save, before_create, around_create, after_create, after_save, after_commit/after_rollback 更新对象时:before_validation, ...

wanconglei的博客 202

探索Active Record:Crystal语言的Active Record模式实现

探索Active Record:Crystal语言的Active Record模式实现 在现代软件开发中,数据持久化是不可或缺的一部分。对于Crystal语言的开发者来说,active_record.cr项目提供了一个简洁而强大的Active Record模式实现,使得数据操作变得更加直观和高效。本文将深入介绍这个开源项目,分析其技术特点,并探讨其在实际应用中的潜力。 项目介绍 active_re...

gitblog_00309的博客 969

active_record_tracer 的安装和配置教程

active_record_tracer 的安装和配置教程 1. 项目基础介绍和主要编程语言 active_record_tracer 是一个开源项目,旨在为 Ruby on Rails 应用程序中的 Active Record 提供跟踪功能。它可以帮助开发者理解 Active Record 的查询是如何在应用程序中执行的,从而帮助优化数据库操作。该项目主要使用 Ruby 编程语言开发。 2. 项...

gitblog_00280的博客 348

Active Record Session Store 使用指南

--- ## 项目介绍 **Active Record Session Store** 是一个由 Ruby on Rails 社区维护的项目,它提供了将应用程序的 session 存储在数据库中的能力。通过利用 Active Record 的灵活性和功能,此存储解决方案允许开发者轻松地管理用户的会话数据。项目基于 MIT 许可证发布,鼓励社区贡献者提交拉取请求、提出新特性建议及参与问题讨论。

gitblog_00745的博客 964

YII2-数据查询Active Record方法

查询数据 AR 提供了两种方法来构建 DB 查询并向 AR 实例里填充数据: •[[yii\db\ActiveRecord::find()]] •[[yii\db\ActiveRecord::findBySql()]] 以上两个方法都会返回 [[yii\db\ActiveQuery]] 实例,该类继承自[[yii\db\Query]], 因此,他们都支 持同一套灵活且强大的 DB 查询方

xmlife的专栏 1万+

i18n-active_record 项目使用教程

i18n-active_record 项目使用教程 1. 项目的目录结构及介绍 i18n-active_record 项目的目录结构如下: i18n-active_record/ ├── lib/ │ ├── i18n/ │ │ ├── backend/ │ │ │ ├── active_record/ │ │ │ │ ├── translation.rb ...

gitblog_00633的博客 296

yii2的Active Record 和 Query Builder 一共包含哪些部分?

就像整理两本工具书一样,Active Record 和 Query Builder 各有特点,帮助我们完成不同类型的数据库操作任务!

长风破浪会有时的博客 910

GraphQL Active Record 项目推荐

GraphQL Active Record 项目推荐 项目基础介绍和主要编程语言 GraphQL Active Record 是一个开源项目,旨在帮助开发者将 Active Record 模型映射到 GraphQL 类型,适用于查询和突变操作。该项目主要使用 Ruby 编程语言,并且假设用户使用的是 Rails 框架和 graphql-batch 库。 项目核心功能 自动字段类型推断:根据数据库...

gitblog_00531的博客 415

Hibernate3.0 vs Rails Active Record

    前篇:最美的MVC,ORM方案原来在别处--Ruby on Rails        Rails的出现,良性的冲击了自己目前使用的Spring+Hibernate架构。有冲击是好的,否则EJB2和Struts现在还一统江湖。    本文主要记述了Hibernate3.0(H3)和Rails Active Record(AR)在定义和使用Domain Objectt方面的优劣,更重要是冲击过

花钱的年华 1万+

Ruby on Rails Active Record Validation Helpers Top 20

在 Ruby on Rails 的开发中,Active Record 提供了许多内置的验证助手(Validation Helpers),用于确保数据在保存到数据库之前符合特定条件。以下是根据常见开发需求和使用频率整理的 Top 20 验证,分为两部分:最常用的 Top 10 和另外 10 个实用验证。

qq18285的博客 688

TheOdinProject课程解析:Active Record基础关联关系

你是否曾经遇到过这样的场景:需要获取用户的所有博客文章,但不知道如何优雅地实现?或者想要构建一个社交网络,让用户可以关注其他用户?这些看似复杂的数据关系问题,在Rails的Active Record关联关系中都能找到简洁优雅的解决方案。 Active Record关联关系是Rails框架中最强大且实用的功能之一。它不仅仅是数据库表之间的连接,更是一种面向对象的思维方式,让你能够用更直观的方式处理...

gitblog_00267的博客 369

ci框架用active_record模型实现分页的技巧

假设我们有这样的一个日志表,记录了各个事件反生时的时间戳: CREATE TABLE `logs`( `timestamp` BIGINT, `event` varchar(50) ) 如果我们要在页面上分页显示出这些事件,假设我们要用ci框架的active_record类实现分页,可能的代码如下: //根据条件过滤 $this->db->select('*')->from('log

u014433030的专栏 619
上一篇: Yii访问控制
下一篇: 关于Yii 的ActiveRecord
jhcl200888
博客等级 码龄18年 11粉丝 33原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值