.NET实体框架中存在哪些设计模式?

时间:2011-11-15 06:01:37

标签: .net entity-framework design-patterns

我被问到问题"实体框架中使用了什么样的四种设计模式"。我真的没想到。

任何人都可以帮助识别EF中的一些GOF设计模式吗?

1 个答案:

答案 0 :(得分:7)

http://en.wikipedia.org/wiki/Design_Patterns_(book)和那里列出的GoF模式,我想出了这个清单:

  • 工厂方法,实体框架ObjectContext提供CreateObjectSet<T>方法,为给定类型创建ObjectSet<T>。由于这些对象集是访问上下文中实体的主要方法,我想说它也是EF中使用的非常重要的模式。
  • 代理,很明显,EF会为您的实体动态创建代理类型(除非您告诉它不要,否则它无法创建代理,因为类已被密封或不符合“可代理的“类型”。
  • 装饰器,这可能有点牵强,但要在代理类型中实现延迟加载,导航属性的属性获取器会被重载,以执行延迟加载直到请求。这是在代理类型中处理的,但也取决于是否启用了延迟加载以及navigation-property本身。
  • 解释器,EF引入了Entity-SQL,它是一种有点概括的SQL形式,它也具有面向对象实体的知识。您可以将这些查询定义为字符串,然后由EF解释并转换为提供程序依赖SQL。
  • 策略,查看ObjectContext.SaveChanges方法的各种重载,您可以选择用于确定对已知实体所做更改的不同策略。
  • Memento ObjectStateManager会跟踪对实体所做的更改,并可用于访问这些信息,包括原始值。
  • Facade ,将实体集公开为IQueryable应该有资格作为“大量代码的简化接口”,因为将这些表达式转换为Entity SQL而不是特定于提供者的SQL是一个大问题
  • 观察者ObjectContext提供了两个ObjectMaterializedSavingChanges。由于.NET事件是观察者模式的实现,因此EF也有资格获得此事件。

我可能对这里的命名模式非常慷慨,但通过一些挖掘,你可以找到许多EF实际实现这些模式的地方。但是,由于这本书出版近20年,你可以预期其中一些模式被认为是标准,这是不值得一提的。例如 Observer 模式或 Iterator 模式(我没有提到过,因为IQueryable实现了IEnumerable)。

相关问题