主动记录

在软件工程中，主动记录模式（active record pattern）是一种架构模式，可见于在关系数据库中存储内存中对象的软件中。它在Martin Fowler的2003年著《企业应用架构的模式》书中命名。符合这个模式的对象的接口将包括函数比如插入、更新和删除，加上直接对应于在底层数据库表格中列的或多或少的属性。

主动记录模式是访问在数据库中的数据的一种方式。数据库表或视图被包装入类。因此，对象实例被连结到这个表格的一个单一行。在一个对象建立之后，在保存时将一个新行增加到表格中。加载的任何对象都从数据库得到它的信息。在一个对象被更新的时候，在表格中对应的行也被更新。包装类为在表格或视图中的每个列都实现访问器方法或属性。

这个模式常用于对象持久化工具和对象关系映射（ORM）之中。典型的，外键联系也通过一个属性而被显露为适当类型的一个对象实例。

 实现 
这个概念的实现可以在很多编程环境中的各种框架中找到。例如，如果在数据库中有一个表格parts，它具有列name（字符串类型）和price（数值类型），而主动记录模式用类Part来实现，伪码为：

 part = new Part()
 part.name = "Sample part"
 part.price = 123.45
 part.save()

它在parts表格中建立有给定值的一个新行，并且粗略的等价于SQL命令：

INSERT INTO parts (name, price) VALUES ('Sample part', 123.45);

反过来，这个类可以被用来查询这个数据库：

 b = Part.find_first("name", "gearbox")

这会找到一个新Part对象，基于在parts表格中其name列的值为"gearbox"的第一个匹配行。使用的SQL命令可能类似于下面所列，具体依赖于这个数据库的SQL实现细节：

SELECT * FROM parts WHERE name = 'gearbox' LIMIT 1; -- MySQL or PostgreSQL

主动记录框架
主动记录框架一般兼有ORM框架的功能，但主动记录不是简单的ORM。关系型数据库往往通过外键来表述实体的联系，主动记录在数据源层面上也将这种联系映射为对象的关联和。著名的例子是解决方案堆栈Web开发框架Ruby on Rails，其默认使用一个纯Ruby写成的主动记录框架来驱动MVC中的模型层。此外还有：

Python
 SQLObject
 Orator

PHP


.NET


Java

 ObjectiveSqlObjectiveSql 
 JFinal

类似模式
主动记录和十分相似，但前者是领域模型模式，后者只是一种数据源模式。主动记录适合非常简单的领域需求，尤其在领域模型和数据库模型十分相似的情况下。如果遇到更加复杂的领域模型结构（例如用到继承、策略的领域模型），往往需要使用分离数据源的领域模型，结合数据映射器使用。

参见
事务对象
增刪查改
数据映射器模式
对象关系映射

 资料来源 

外部链接
 Martin Fowler对主动记录的定义

Category:软件设计模式