惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

月光博客
月光博客
Stack Overflow Blog
Stack Overflow Blog
L
LangChain Blog
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
雷峰网
雷峰网
T
Tailwind CSS Blog
MongoDB | Blog
MongoDB | Blog
博客园 - 【当耐特】
博客园 - 聂微东
V
Visual Studio Blog
博客园_首页
Engineering at Meta
Engineering at Meta
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
The Cloudflare Blog
人人都是产品经理
人人都是产品经理
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
Microsoft Security Blog
Microsoft Security Blog
GbyAI
GbyAI
F
Fortinet All Blogs
C
Check Point Blog
罗磊的独立博客
H
Hackread – Cybersecurity News, Data Breaches, AI and More

博客园 - 狂风

sql日期时间计算处理大全 自动内存管理 服务端合并和压缩JS和CSS文件 C#Excel操作的用法 SQL Server数据库的数据汇总完全解析(WITH ROLLUP) net托管资源和非托管资源 web性能测试分析-工具篇 操作iis应用程序池 深入理解.NET内存回收机制 磁盘空间使用关乎SQL Server性能 Web站点数据库分布存储 lucene 简单应用 - 狂风 - 博客园 Lucene系统结构分析 Lucene : 倒排文件索引 数据库设计5步骤 GoF 设计模式 - 狂风 - 博客园 超链接获取 window.opener属性 - 狂风 - 博客园 基于LVS的Linux负载均衡技术实现(第一篇:基本原理) cc攻击
ActiveRecord 模型
狂风 · 2010-12-06 · via 博客园 - 狂风

ActiveRecord是什么:
1. 每一个数据库表对应创建一个类.类的每一个对象实例对应于数据库中表的一行记录; 通常表的每个字段在类中都有相应的Field;
2. ActiveRecord同时负责把自己持久化. 在ActiveRecord中封装了对数据库的访问, 即CRUD;
3. ActiveRecord是一种领域模型(Domain Model), 封装了部分业务逻辑;

ActiveRecord与数据库耦合更紧;

定义:

1、Active Record pattern实现,它是指一个既包含数据又包含行为的对象,这些数据需要持久保存到对应的数据表中。Active Record一个很明显的特征是:将数据访问逻辑也包含在这个domain对象中,通过这种办法让人们可以知道如何从数据库读写数据。也就是将Dao中对数据库的CRUD方法和Domain Object整合在一起

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对象;

这个模式的技术架构:

UI(Form/Web网页):数据展示, 有控件, 或者完全的HTML标签, Jsp中还有EL

Datasource:数据提供者,提供给页面控件(元素)展示数据, Net有 SQLDatasource,ObjectDatasource

    Java有 JSP 对应的<jsp:bean>, <jsp:setProperty>, <jsp:getProperty> 等标签

    Zen框架中 QuerySource

BO:业务逻辑层, 实现:业务逻辑与算法,Entity类业务逻辑方法,数据验证, 生成DTO层对象等功能,

业务逻辑与Datasource之间的DTO层, 用来传输数据,这些数据可能是表、视图或者综合的一个POJO,对于简单数据可以与Entity共用一个类。

Entity层: 类与数据库之间的映射层, 对应的关系型数据库, 保存数据时转换成SQL语句, 对应Cache数据库使用它自己的代理方法

ActiveRecord: 技术框架层, 所有的Entity都继承此层的基类;本基类中包含了数据操作方法,封装了部分业务逻辑

    对应的产品: Net Castle的 ActiveRecord框架, Cache数据库的Persistent类的数据存储框架,

本文出处http://zhaocz.blog.51cto.com/542576/307894

发表于 2010-12-06 14:20  狂风  阅读(500)  评论()    收藏  举报