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

推荐订阅源

Recent Announcements
Recent Announcements
V
V2EX
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
博客园 - 聂微东
爱范儿
爱范儿
Jina AI
Jina AI
博客园 - Franky
IT之家
IT之家
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
T
Tailwind CSS Blog
博客园 - 三生石上(FineUI控件)
The Cloudflare Blog
M
MIT News - Artificial intelligence
aimingoo的专栏
aimingoo的专栏
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
J
Java Code Geeks
人人都是产品经理
人人都是产品经理
腾讯CDC
博客园_首页
月光博客
月光博客
有赞技术团队
有赞技术团队
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
MyScale Blog
MyScale Blog

博客园 - yysun

看看 EJB 3.0 的 O/R Mapping Unit Test : MVP vs PM - yysun Refactor CAB Smart Part Quick Start Project to "Presentation Model" test P&P OB CAB EntLib SQL/e WB Editor 2.5 is in beta - yysun 把图片存到 Flickr 与 Biztalk 搏斗 Manage Plug-ins 申请 WB Editor 2 注册码 SharpReader Plug-in AJAX WB Editor 2 的口号[yysun] 用 XSL 生成 HTML 日历[yysun] 用 XSL 重命名 XML tag name[yysun] XPathDocument 与 XmlDocument 结合使用[yysun] 再谈 JXPath 与 ObjectXPathNavigator[yysun] 用 WB Editor 连接 cnblogs.com 的全攻略[yysun]
Active Record Pattern 和 ORM
yysun · 2006-06-18 · via 博客园 - yysun

Active Record Pattern 因为 Ruby on Rails 而出名。ASP.NET 中广泛流的使用 Typed DataSet 的办法,其实也就是 Active Record Pattern。

因为 Typed DataSet 有很多弊端,又不是 POJO Entity,所以被一开始就被我否定的了,但是不幸的是,同时我也否定了 Active Record Pattern。

事实上这个模式在“数据库驱动的 Web 系统”这个前提下是相当成功的。因为这种系统中的 Entity Life Cycle 可以非常短。

  • 一个 Life Cycle 从数据库中生来出来,到绑定到界面上结束。
  • 另一个 Life Cycle 从收集用户输入开始,到保存入数据库结束。

在“数据库驱动的 Web 系统”中,用轻量级 POJO Entity 加上 Active Record Pattern 是非常合适的。

用 Domain Driven Design 概念并没有错,但是不要遗忘进一步细化到应用前提,比如在 Web 下这个模型应该是个什么样子。系统模型的 Entity 不一定能直接用到 Web 系统中。GoF 提倡的 OOP 原则是 "favor interface over base class"。核心含义就是只关心系统中必须知道的那一部分。同样应用到设计中,非常有必要为不同的应用场景设计轻量级的 Entity。

这就产生对轻量级 ORM 的需求。把数据库的数据载入 Entity,再把 Entity  中数据存回数据库。轻量级就是仅此功能而已,不要企图区管理 Entity Life Cycle,不要追求 Container Level Transaction,更不要弄出个 Application Server 出来。

实际上 MS 已经意识在这点,在下一代的 ADO.NET 中将包含 Entity Data Model (EDM),见 The ADO.NET Entity Framework Overview。几度取消 Object Space 的发布,并不是它不重要,而是太重要了,以至于必须为它安置个更加合适的位置,比如.NET 的核心部位,ADO.NET。使得 Typed DataSet 的粉丝没有话说。