Wenn Sie sich Beispielcode im MSDN ansehen, dann wird Eines ganz schnell klar: Wer einen O/R-Mapper wie das Entity Framework oder NHibernate einsetzt, der sollte ihn mit dem Repository Pattern paaren. Idealerweise sogar mit generischen Repositories. Schließlich können Sie nur so den O/R-Mapper Ihrer Wahl vor den darüber liegenden Schichten verbergen. Aber ist dieses Versteckspiel vorteilhaft? Wie sinnvoll ist es wirklich, höhere Schichten bewusst dumm zu halten? Und gewinnen Sie auch Flexibilität durch diese Herangehensweise? Genau um diese Fragen geht es in diesem Vortrag. Anhand einiger Praxisbeispiele werden wir uns im Vergleich zu den typischen MSDN-Anwendungen ansehen, ob das Repository Pattern tatsächlich seine Berechtigung hat.
11. OR-Mapper
• Abbildung von Tabellen auf Klassen
• Objektorientierte Sicht auf die Datenbank
• Es muss kein SQL mehr geschrieben werden
• Eine weitere Abstraktionsschicht
18. Entwurfsmuster
• Lösungsschablone für wiederkehrende Probleme
• Keine direkte Lösung, sondern Beschreibung eines praxiserprobten
Lösungswegs
19. Repository Muster
Mediates between the domain and data mapping
layers using a collection-like interface for accessing
domain objects.
20. Repository Muster (2)
• Client objects construct query specifications declaratively and
submit them to Repository for satisfaction
• Objects can be added to and removed from the Repository, as they
can from a simple collection of objects, and the mapping code […]
will carry out the appropriate operations […]
31. Warum Repositories?
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung
• Wiederverwendbarkeit komplexer Abfragen durch Kapselung
• Testbarkeit
• Haben wir immer schon so gemacht
• Ziel liegt in der Entkopplung
41. Wiederverwendbarkeit von Abfragen (2)
• Abfragen sind meist Use Case spezifisch
• Änderung einer Abfrage für Use Case 1 kann Fehler in anderen
Use Cases erzeugen
42. Warum Repositories?
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung
• Wiederverwendbarkeit komplexer Abfragen durch
Kapselung
• Testbarkeit
• Haben wir immer schon so gemacht
44. Folgen von IQueryable als Rückgabe
• Abfragen werden nicht mehr gekapselt
• Unabhängigkeit von der darunter liegenden Datenzugriffsschicht
entfällt
46. Er läuft unter NHibernate nicht
http://stackoverflow.com/questions/14458050/sum-of-top-5-elements-in-nhibernate-linq
47. Warum Repositories?
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung
• Wiederverwendbarkeit komplexer Abfragen durch
Kapselung
• Testbarkeit
• Haben wir immer schon so gemacht
48. Testbarkeit
• Der Einsatz von Repositories ermöglicht Unit Tests der aufrufenden
Klasse (Controller, Business Service)
• EF DbContext kann „gemocked“ werden
50. Warum Repositories?
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung
• Wiederverwendbarkeit komplexer Abfragen durch
Kapselung
• Testbarkeit
• Haben wir immer schon so gemacht
51. Haben wir schon immer so gemacht
• Repository Pattern entstand, bevor es O/R Mapper gab
• SQL wurde per Stringverkettung erzeugt
• Primär wurde mit Recordsets gearbeitet
• Connection Management war komplex
• Ziel war es, diese Komplexität zu verstecken
52. Warum Repositories?
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung
• Wiederverwendbarkeit komplexer Abfragen durch
Kapselung
• Testbarkeit
• Haben wir immer schon so gemacht
61. Repositories
• Vermitteln zwischen Domain und Data-Mapping Schicht
• Isoliert Domänen Objekte vom Datenzugriffscode
• Verhält sich wie eine Collection
• Stellt eine objektorientierte Sicht bereit
62. Repositories
• Vermitteln zwischen Domain und Data-Mapping Schicht
• Isoliert Domänen Objekte vom Datenzugriffscode
• Verhält sich wie eine Collection
• Stellt eine objektorientierte Sicht bereit
63. Repositories
• Lösen ein Problem, das auch der O/R Mapper löst
• Sind eine weitere Abstraktion, deren Pflege Kosten verursacht
• Bereiten auf die 1%ige Wahrscheinlichkeit vor, dass der O/R Mapper
getauscht werden soll
64. Vielen Dank!
Homepage
Blog
Xing
Facebook
Twitter
Google+
andre@andrekraemer.de | http://andrekraemer.de | http://andrekraemer.de/blog
64
Schulung und Beratung mit den Schwerpunkten:
• Windows 8 und Windows Phone Apps
• ASP.NET MVC, Web API & JavaScript
• Team Foundation Server / ALM
• Automatische Dokumentengenerierung mit TX Text Control
• Performance- & Memory Analysen
• Softwarearchitektur