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

She*_*tin 4 .net design-patterns entity-framework

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

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

J. *_*hon 7

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

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

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