.net - .NET Entity Framework 中存在哪些设计模式?

标签 .net entity-framework design-patterns

就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the help center寻求指导。




10年前关闭。




我被问到“ Entity Framework 中使用了哪四种设计模式”这个问题。我真的想不出来。

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

最佳答案

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

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

  • 我可能对这里的命名模式非常慷慨,但是通过一些挖掘,您可以找到很多 EF 实际实现这些模式的地方。但是由于这本书已经出版了近 20 年,你可以期望其中一些模式被认为是一种标准,这不值得一提。例如 观察员 模式或 迭代器 模式(我没有提到,只是因为 IQueryable 实现了 IEnumerable)。

    关于.net - .NET Entity Framework 中存在哪些设计模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8132133/

    相关文章:

    c# - 如何在 Entity Framework 中使用事务?

    silverlight - Silverlight 4 中对 EF 实体的输入验证

    .net - 如何在 Entity Framework 中查询空值?

    java - 为什么我们需要 Memento 模式中的 Caretaker 类?真的有那么重要吗?

    node.js - 使用 ipcMain 和 ipcRenderer 解决 Electron 应用程序中事件困惑的设计模式

    c# - 如何通过Linq从xml中获取值

    .net - 在 .NET 中与 COM 交互之前是否需要调用 CoInitialize?

    .NET : Get property name in attribute

    java - 在 float[][] 中搜索 3D 图案

    .net - 使用 Redis CLI 连接到远程 Azure Redis 缓存