对象关系映射和透明持久化

  • Roopesh Shenoy
  • 马德奎

2013 年 9 月 1 日

话题:.NET语言 & 开发架构

Julie Lerman最近注意到,Entity Framework 可以使用具有私有构造函数和私有属性 setter 方法的类

在 Julie 发表的测试中,读者可以看到,Entity Framework(EF)能够为拥有私有 setter 方法的属性赋值及调用私有构造函数,而且过程比较简单。EF 通过引用 EntityProxyFactory类和其它相关类实现这一过程,但关键是综合运用了反射和 IL Emit 方法。NHibernate 更进一步,它甚至支持存取私有属性(这点在设计 EF 时也已经讨论过)。不过,目前两者均需要开发人员提供默认构造函数(即使是非公共的)。

Julie 说,这个发展方向很好,因为它可以促进透明持久化

从架构上说,Entity Framework 和 NHibernate 两者均支持使用有助于实现透明持久化的模式——

相应地,Entity framework 有类DBSetDBContext,而 NHibernate 有QueryOver api 和类SessionContext。另一方面,为了支持延迟加载,目前两者也都遵循违背这一原则的“虚拟代理(Virtual Proxy)” 模式(需要把属性标记为 virtual)。

一般来说,透明持久化是个很好的做法;例如,与使用“活动记录(Active Record)” 模式不同,它将业务规则与持久化逻辑分离。由此,整个设计更简洁,测试更容易。

查看英文原文:ORMs And Persistence Ignorance

.NET语言 & 开发架构