Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What Design Patterns are present in the .NET Entity Framework? [closed]

I was asked the question "What Gang of Four Design Patterns are used in Entity Framework". I could not really think of any.

Can anyone help to identify some of the GOF design patterns in EF?

like image 907
Sheldon Warkentin Avatar asked Feb 22 '23 09:02

Sheldon Warkentin


1 Answers

Looking at http://en.wikipedia.org/wiki/Design_Patterns_(book) and the GoF-patterns listed there, I came up with this list:

  • Factory Method, an Entity Framework ObjectContext provides a CreateObjectSet<T> method, which creates an ObjectSet<T> for the given type. Since those object-sets are the main approach to access the entities within a context, I would say it is also a very important pattern used in EF.
  • Proxy, obviously EF dynamically creates proxy-types for your entities (unless you tell it not to, or it can't create a proxy because a class is sealed or does not qualify as a "proxyable" type).
  • Decorator, this might be a bit far fetched, but to implement lazy-loading in proxy-types, the property-getters of navigation-properties are overloaded, to perform the lazy-loading until requested. This is handled in the proxy type, but also depends on whether lazy-loading is enabled and the navigation-property itself.
  • Interpreter, EF introduced Entity-SQL which is a somewhat generalized form of SQL that also has knowledge of the object-orientied entities. You can define a those queries as strings which are then interpreted by EF and turned into provider-dependend SQL.
  • Strategy, looking at the various overloads of the ObjectContext.SaveChanges method, you can select from different strategies that are used to determine changes made on known entities.
  • Memento, the ObjectStateManager keeps track of changes made to the entities and can be used to access those information including the original-values.
  • Facade, exposing entity-sets as IQueryable should qualify as "a simplified interface to a large body of code", since turning such expressions into Entity SQL and than provider-specific SQL is a big deal.
  • Observer, ObjectContext provides two eventy ObjectMaterialized and SavingChanges. Since .NET events are an implementation of the observer-pattern, EF also qualifies for this one.

I may have been very generous with naming patterns here, but with some digging you can find a lot of places where EF actually implements those patterns. But since the book is out for nearly 20 years, you can expect that some of these patterns are considered a standard, which isn't worth mentioning. For example the Observer pattern or the Iterator pattern (which I haven't mentioned, just because IQueryable implements IEnumerable).

like image 153
J. Tihon Avatar answered Feb 25 '23 01:02

J. Tihon