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

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

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

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

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

  • “仓储(Repository)”模式
  • “工作单元(Unit of work)”模式

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

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

查看英文原文:ORMs And Persistence Ignorance

你可能感兴趣的:(对象关系映射和透明持久化)