维基百科 ひゃっか ,自由 じゆう 的 てき 百科 ひゃっか 全 ぜん 书
在 ざい 软件工程 こうてい 中 なか ,主 しゅ 动记录模式 しき (active record pattern)是 ぜ 一 いち 种架 か 构模式 しき ,可 か 见于在 ざい 关系数 すう 据 すえ 库 中 ちゅう 存 そん 储内存 そん 中 ちゅう 对象的 てき 软件中 ちゅう 。它在Martin Fowler 的 てき 2003年 ねん 著 ちょ 《企 くわだて 业应用 よう 架 か 构的模 も 式 しき 》书中命名 めいめい [ 1] 。符合 ふごう 这个模 も 式 しき 的 てき 对象的 てき 接 せっ 口 こう 将 はた 包括 ほうかつ 函数 かんすう 比 ひ 如插入 そうにゅう 、更新 こうしん 和 わ 删除,加 か 上 じょう 直接 ちょくせつ 对应于在底 そこ 层数据 すえ 库表格 かく 中 ちゅう 列 れつ 的 てき 或 ある 多 おお 或 ある 少 すくな 的 てき 属性 ぞくせい 。
主 しゅ 动记录模式 しき 是 ぜ 访问在 ざい 数 すう 据 すえ 库中的 てき 数 すう 据 すえ 的 てき 一 いち 种方式 しき 。数 かず 据 すえ 库表或 ある 视图 被 ひ 包装 ほうそう 入 いれ 类 。因 よし 此,对象 实例被 ひ 连结到这个表 ひょう 格 かく 的 てき 一 いち 个单一 いち 行 ぎょう 。在 ざい 一个对象建立之后,在 ざい 保存 ほぞん 时将一个新行增加到表格中。加 か 载的任 にん 何 なん 对象都 と 从数据 すえ 库得到 いた 它的信 しん 息 いき 。在 ざい 一个对象被更新的时候,在 ざい 表 ひょう 格 かく 中 ちゅう 对应的 てき 行 ぎょう 也被更新 こうしん 。包装 ほうそう 类为在 ざい 表 ひょう 格 かく 或 ある 视图中 ちゅう 的 てき 每 まい 个列都 と 实现访问器 き 方法 ほうほう 或 ある 属性 ぞくせい 。
这个模 も 式 しき 常用 じょうよう 于对象 ぞう 持久 じきゅう 化 か 工具 こうぐ 和 わ 对象关系映 うつ 射 い (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 中 なか 的 てき 模型 もけい 层。此外还有:
主 しゅ 动记录和行 くだり 数 すう 据 すえ 门径十分 じゅうぶん 相似 そうじ ,但 ただし 前者 ぜんしゃ 是 ぜ 领域模型 もけい 模 も 式 しき ,后 きさき 者 しゃ 只 ただ 是 ぜ 一种数据源模式。主 しゅ 动记录适合 あい 非常 ひじょう 简单的 てき 领域需求,尤 ゆう 其在领域模型 もけい 和 わ 数 すう 据 すえ 库模型 がた 十 じゅう 分 ふん 相似 そうじ 的 てき 情 じょう 况下。如果遇 ぐう 到 いた 更 さら 加 か 复杂的 てき 领域模型 もけい 结构(例 れい 如用到 いた 继承、策略 さくりゃく 的 てき 领域模型 もけい ),往往 おうおう 需要 じゅよう 使用 しよう 分 ぶん 离数据 すえ 源 げん 的 てき 领域模型 もけい ,结合数 かず 据 すえ 映 うつ 射 い 器 き 使用 しよう 。