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
评论