导航

Active Record Pattern 和 ORM

Posted on 2006-06-18 00:21  yysun  阅读(3073)  评论(5编辑  收藏  举报

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 的粉丝没有话说。