SlideShare ist ein Scribd-Unternehmen logo
1 von 64
Das Repository-Pattern 
und der O/R-Mapper: 
Geniale Kombination oder 
vergebene Liebesmüh? 
André Krämer 
Softwareentwickler, Trainer, Berater
Video Auszeichnungen Trainings Zertifizierungen
Was machen wir eigentlich den 
ganzen Tag?
Customer 
Order OrderItem 
Product 
orders* 
0…* 
1
Name Street City Date 
Relation-ship 
Customer Orders Id 
Relation-ship 
OrderItem 
City Price Shipped
DataReader (.NET 1.0 Style) 
using (connection) 
{ 
SqlCommand command = 
new SqlCommand( "SELECT CategoryID, CategoryName FROM Categories;", 
connection); 
connection.Open(); 
SqlDataReader reader = command.ExecuteReader(); 
if (reader.HasRows) 
{ 
while (reader.Read()) 
{ 
Console.WriteLine("{0}t{1}", reader.GetInt32(0), reader.GetString(1)); 
} 
} 
else 
{ 
Console.WriteLine("No rows found."); 
} 
reader.Close(); 
}
30 % der Arbeitszeit sind verloren
• ? 
?
ORMs (Entity Framework)
NHibernate
OR-Mapper 
• Abbildung von Tabellen auf Klassen 
• Objektorientierte Sicht auf die Datenbank 
• Es muss kein SQL mehr geschrieben werden 
• Eine weitere Abstraktionsschicht
Einsatz des O/R Mappers
Beispiel entnommen aus: 
http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4
Beispiel entnommen aus: 
http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4
Beispiel entnommen aus: 
http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4
public ActionResult Index() 
{ 
} 
public ActionResult Details() 
{ 
} 
public ActionResult Create() 
{ 
} 
public ActionResult Edit() 
{ 
} 
public ActionResult Delete() 
{ 
} 
Daten-bank 
EF 
Context 
& 
Models
Typischer Einsatz des 
O/R Mappers 
In Kombination mit dem Repository Entwurfsmuster
Entwurfsmuster 
• Lösungsschablone für wiederkehrende Probleme 
• Keine direkte Lösung, sondern Beschreibung eines praxiserprobten 
Lösungswegs
Repository Muster 
Mediates between the domain and data mapping 
layers using a collection-like interface for accessing 
domain objects.
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 […]
Anwendung des 
Repository Muster
Variante 1
Variante 2
public ActionResult Index() 
{ 
} 
public ActionResult Details() 
{ 
} 
public ActionResult Create() 
{ 
} 
public ActionResult Edit() 
{ 
} 
public ActionResult Delete() 
{ 
} 
Daten-bank 
Repository 
EF 
Context 
& 
Models
Gründe für den Einsatz
Warum Repositories? 
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung 
• Wiederverwendbarkeit komplexer Abfragen durch Kapselung 
• Testbarkeit 
• Haben wir immer schon so gemacht 
•  Ziel liegt in der Entkopplung
O/R Mapper + 
Repository =
Wiederverwendbarkeit 
komplexer Abfragen 
durch Kapselung
• Keine Filter in der Datenbank 
• Keine Sortierung in der Datenbank 
• Kein Include oder Prefetching
Folgen der Abfragekapselung 
• Umfangreiche Repository Klassen mit zu vielen Verantwortlichkeiten 
• Geschäftslogik in der Datenzugriffsschicht
Wiederverwendbarkeit von Abfragen 
Use 
Case 1 
Use 
Case 2 
Use 
Case 3 
Use 
Case 4 
Use 
Case 5
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
Warum Repositories? 
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung 
• Wiederverwendbarkeit komplexer Abfragen durch 
Kapselung 
• Testbarkeit 
• Haben wir immer schon so gemacht
Alternative Implementierung
Folgen von IQueryable als Rückgabe 
• Abfragen werden nicht mehr gekapselt 
• Unabhängigkeit von der darunter liegenden Datenzugriffsschicht 
entfällt
Was ist falsch an diesem Code?
Er läuft unter NHibernate nicht 
http://stackoverflow.com/questions/14458050/sum-of-top-5-elements-in-nhibernate-linq
Warum Repositories? 
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung 
• Wiederverwendbarkeit komplexer Abfragen durch 
Kapselung 
• Testbarkeit 
• Haben wir immer schon so gemacht
Testbarkeit 
• Der Einsatz von Repositories ermöglicht Unit Tests der aufrufenden 
Klasse (Controller, Business Service) 
• EF DbContext kann „gemocked“ werden
DBSetHelper Klasse
Warum Repositories? 
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung 
• Wiederverwendbarkeit komplexer Abfragen durch 
Kapselung 
• Testbarkeit 
• Haben wir immer schon so gemacht
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
Warum Repositories? 
• Austauschbarkeit der Datenzugriffsschicht durch Kapselung 
• Wiederverwendbarkeit komplexer Abfragen durch 
Kapselung 
• Testbarkeit 
• Haben wir immer schon so gemacht
Bonusfrage 
Was ist problematisch an folgendem Code?
Alternativen
Einsatz von O/R Mappern im UI Code 
• Manchmal!
Query Objekte
Fazit
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
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
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
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

Weitere ähnliche Inhalte

Andere mochten auch

Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)André Krämer
 
SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014Erlebe Software
 
Vergleich LEEN und Mari:e
Vergleich LEEN und Mari:eVergleich LEEN und Mari:e
Vergleich LEEN und Mari:eUlla Herbst
 
Instructions SCHMIDT & BENDER 12.5-50x56 Field Target II | Optics Trade
Instructions SCHMIDT & BENDER 12.5-50x56 Field Target II | Optics TradeInstructions SCHMIDT & BENDER 12.5-50x56 Field Target II | Optics Trade
Instructions SCHMIDT & BENDER 12.5-50x56 Field Target II | Optics TradeOptics-Trade
 
AGENTE INTELIGENTE: “SISTEMA DE SEGURIDAD PARA CASAS”
AGENTE INTELIGENTE: “SISTEMA DE SEGURIDAD PARA CASAS”AGENTE INTELIGENTE: “SISTEMA DE SEGURIDAD PARA CASAS”
AGENTE INTELIGENTE: “SISTEMA DE SEGURIDAD PARA CASAS”Emprendimiento Shalah
 
03_Matthias.ppt
03_Matthias.ppt03_Matthias.ppt
03_Matthias.pptSumba003
 
PokeMON VS PELOLAIS
PokeMON VS PELOLAISPokeMON VS PELOLAIS
PokeMON VS PELOLAISguest9ab759
 
Instructions MINOX NVD mini | Optics Trade
Instructions MINOX NVD mini | Optics TradeInstructions MINOX NVD mini | Optics Trade
Instructions MINOX NVD mini | Optics TradeOptics-Trade
 
Problem erkannt, Problem gebannt?
Problem erkannt, Problem gebannt?Problem erkannt, Problem gebannt?
Problem erkannt, Problem gebannt?Inga Overkamp
 
Lombardium-Skandal: Sitzverlegung der Fondsgesellschaften
Lombardium-Skandal: Sitzverlegung der FondsgesellschaftenLombardium-Skandal: Sitzverlegung der Fondsgesellschaften
Lombardium-Skandal: Sitzverlegung der Fondsgesellschaftenolik88
 
Academia De Tenis[1]
Academia De Tenis[1]Academia De Tenis[1]
Academia De Tenis[1]Sandro Suito
 
Programa Para El Mejoramiento Del Sistema Educativof
Programa Para El Mejoramiento Del Sistema EducativofPrograma Para El Mejoramiento Del Sistema Educativof
Programa Para El Mejoramiento Del Sistema EducativofVanesa Casal
 
Ciudad subterranea derinkuyu
Ciudad subterranea derinkuyuCiudad subterranea derinkuyu
Ciudad subterranea derinkuyuanaccapote
 
Competencia digital
Competencia digitalCompetencia digital
Competencia digitalisaperez
 

Andere mochten auch (20)

Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
Cross Plattform App Entwicklung mit Visual Studio 2015 (Xamarin und Cordova)
 
SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014SAP Infotag: Security / Erlebe-Software 07-2014
SAP Infotag: Security / Erlebe-Software 07-2014
 
Vergleich LEEN und Mari:e
Vergleich LEEN und Mari:eVergleich LEEN und Mari:e
Vergleich LEEN und Mari:e
 
Instructions SCHMIDT & BENDER 12.5-50x56 Field Target II | Optics Trade
Instructions SCHMIDT & BENDER 12.5-50x56 Field Target II | Optics TradeInstructions SCHMIDT & BENDER 12.5-50x56 Field Target II | Optics Trade
Instructions SCHMIDT & BENDER 12.5-50x56 Field Target II | Optics Trade
 
AGENTE INTELIGENTE: “SISTEMA DE SEGURIDAD PARA CASAS”
AGENTE INTELIGENTE: “SISTEMA DE SEGURIDAD PARA CASAS”AGENTE INTELIGENTE: “SISTEMA DE SEGURIDAD PARA CASAS”
AGENTE INTELIGENTE: “SISTEMA DE SEGURIDAD PARA CASAS”
 
03_Matthias.ppt
03_Matthias.ppt03_Matthias.ppt
03_Matthias.ppt
 
Superar La Crisis
Superar La CrisisSuperar La Crisis
Superar La Crisis
 
PokeMON VS PELOLAIS
PokeMON VS PELOLAISPokeMON VS PELOLAIS
PokeMON VS PELOLAIS
 
Instructions MINOX NVD mini | Optics Trade
Instructions MINOX NVD mini | Optics TradeInstructions MINOX NVD mini | Optics Trade
Instructions MINOX NVD mini | Optics Trade
 
Problem erkannt, Problem gebannt?
Problem erkannt, Problem gebannt?Problem erkannt, Problem gebannt?
Problem erkannt, Problem gebannt?
 
Trockenmittel Silica Gel
Trockenmittel Silica GelTrockenmittel Silica Gel
Trockenmittel Silica Gel
 
Eclipse Isla de Pascua
Eclipse Isla de PascuaEclipse Isla de Pascua
Eclipse Isla de Pascua
 
Lombardium-Skandal: Sitzverlegung der Fondsgesellschaften
Lombardium-Skandal: Sitzverlegung der FondsgesellschaftenLombardium-Skandal: Sitzverlegung der Fondsgesellschaften
Lombardium-Skandal: Sitzverlegung der Fondsgesellschaften
 
Academia De Tenis[1]
Academia De Tenis[1]Academia De Tenis[1]
Academia De Tenis[1]
 
Modelo de cambio
Modelo de cambioModelo de cambio
Modelo de cambio
 
Programa Para El Mejoramiento Del Sistema Educativof
Programa Para El Mejoramiento Del Sistema EducativofPrograma Para El Mejoramiento Del Sistema Educativof
Programa Para El Mejoramiento Del Sistema Educativof
 
Ciudad subterranea derinkuyu
Ciudad subterranea derinkuyuCiudad subterranea derinkuyu
Ciudad subterranea derinkuyu
 
Presion 9no
Presion 9noPresion 9no
Presion 9no
 
Resumen primera semana
Resumen primera semanaResumen primera semana
Resumen primera semana
 
Competencia digital
Competencia digitalCompetencia digital
Competencia digital
 

Ähnlich wie Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene Liebesmüh?

Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro sessionVirttoo org
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataDai Yang
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere RESTMartin Abraham
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Josef Adersberger
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?QAware GmbH
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlMatthias Niehoff
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New FeaturesUlrike Schwinn
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der PraxisTobias Kraft
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in RailsAngelo Maron
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10inovex GmbH
 
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...Cristina Vidu
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerNETUserGroupBern
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerSandro Sonntag
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankUlrike Schwinn
 
chapter zürich rpa best practices
chapter zürich rpa best practiceschapter zürich rpa best practices
chapter zürich rpa best practicesCristina Vidu
 
JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)Michael Kurz
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdAOE
 
Roadshow: What's new in Microsoft SQL Server 2016
Roadshow: What's new in Microsoft SQL Server 2016Roadshow: What's new in Microsoft SQL Server 2016
Roadshow: What's new in Microsoft SQL Server 2016Digicomp Academy AG
 

Ähnlich wie Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene Liebesmüh? (20)

Ruby on Rails in a metro session
Ruby on Rails in a metro sessionRuby on Rails in a metro session
Ruby on Rails in a metro session
 
LAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global DataLAIK: A Library for Fault Tolerant Distribution of Global Data
LAIK: A Library for Fault Tolerant Distribution of Global Data
 
Ist GraphQL das bessere REST
Ist GraphQL das bessere RESTIst GraphQL das bessere REST
Ist GraphQL das bessere REST
 
Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?Cloud Native und Java EE: Freund oder Feind?
Cloud Native und Java EE: Freund oder Feind?
 
Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?Cloud Native & Java EE: Freund oder Feind?
Cloud Native & Java EE: Freund oder Feind?
 
Streaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der WahlStreaming Plattformen und die Qual der Wahl
Streaming Plattformen und die Qual der Wahl
 
Oracle Text 12c New Features
Oracle Text 12c New FeaturesOracle Text 12c New Features
Oracle Text 12c New Features
 
Grails im Überblick und in der Praxis
Grails im Überblick und in der PraxisGrails im Überblick und in der Praxis
Grails im Überblick und in der Praxis
 
Domain Driven Design in Rails
Domain Driven Design in RailsDomain Driven Design in Rails
Domain Driven Design in Rails
 
Bi testing media_factory_0.10
Bi testing media_factory_0.10Bi testing media_factory_0.10
Bi testing media_factory_0.10
 
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
Developer Best Practices (Robotic Enterprise Framework REF) – Anwendung und d...
 
Ruby und Rails für .NET Entwickler
Ruby und Rails für .NET EntwicklerRuby und Rails für .NET Entwickler
Ruby und Rails für .NET Entwickler
 
Server Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM ServerServer Revolutions- Der Spring Source DM Server
Server Revolutions- Der Spring Source DM Server
 
Heterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle DatenbankHeterogene Daten(-strukturen) in der Oracle Datenbank
Heterogene Daten(-strukturen) in der Oracle Datenbank
 
chapter zürich rpa best practices
chapter zürich rpa best practiceschapter zürich rpa best practices
chapter zürich rpa best practices
 
CKAN by Friedrich Lindenberg
CKAN by Friedrich LindenbergCKAN by Friedrich Lindenberg
CKAN by Friedrich Lindenberg
 
JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)JSF und JPA effizient kombinieren (W-JAX 2011)
JSF und JPA effizient kombinieren (W-JAX 2011)
 
Python Academy
Python AcademyPython Academy
Python Academy
 
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von AngrybirdCloud Deployment und (Auto)Scaling am Beispiel von Angrybird
Cloud Deployment und (Auto)Scaling am Beispiel von Angrybird
 
Roadshow: What's new in Microsoft SQL Server 2016
Roadshow: What's new in Microsoft SQL Server 2016Roadshow: What's new in Microsoft SQL Server 2016
Roadshow: What's new in Microsoft SQL Server 2016
 

Mehr von André Krämer

Xamarin.Forms App in einer Stunde
Xamarin.Forms App in einer StundeXamarin.Forms App in einer Stunde
Xamarin.Forms App in einer StundeAndré Krämer
 
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...André Krämer
 
Codewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximierenCodewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximierenAndré Krämer
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018André Krämer
 
Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018André Krämer
 
Android Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickelnAndroid Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickelnAndré Krämer
 
Xamarin ohne Mac und Android SDK? - So weit kommen Sie mit dem Xamarin Live P...
Xamarin ohne Mac und Android SDK?- So weit kommen Sie mit dem Xamarin Live P...Xamarin ohne Mac und Android SDK?- So weit kommen Sie mit dem Xamarin Live P...
Xamarin ohne Mac und Android SDK? - So weit kommen Sie mit dem Xamarin Live P...André Krämer
 
Typische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
Typische Sicherheitslücken in ASP.NET MVC und Web API AnwendungenTypische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
Typische Sicherheitslücken in ASP.NET MVC und Web API AnwendungenAndré Krämer
 
Lokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-AppsLokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-AppsAndré Krämer
 
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)André Krämer
 
Performance trotz Entity Framwork
Performance trotz Entity FramworkPerformance trotz Entity Framwork
Performance trotz Entity FramworkAndré Krämer
 

Mehr von André Krämer (11)

Xamarin.Forms App in einer Stunde
Xamarin.Forms App in einer StundeXamarin.Forms App in einer Stunde
Xamarin.Forms App in einer Stunde
 
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
Entwicklung von ASP.NET-Core- und SQL-Server-Anwendungen unter macOS in der P...
 
Codewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximierenCodewiederverwendung in Xamarin-Apps maximieren
Codewiederverwendung in Xamarin-Apps maximieren
 
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018Einstieg in Xamarin und Xamarin.Forms, DDC 2018
Einstieg in Xamarin und Xamarin.Forms, DDC 2018
 
Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018Xamarin.Forms Workshop, DDC 2018
Xamarin.Forms Workshop, DDC 2018
 
Android Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickelnAndroid Apps mit Xamarin entwickeln
Android Apps mit Xamarin entwickeln
 
Xamarin ohne Mac und Android SDK? - So weit kommen Sie mit dem Xamarin Live P...
Xamarin ohne Mac und Android SDK?- So weit kommen Sie mit dem Xamarin Live P...Xamarin ohne Mac und Android SDK?- So weit kommen Sie mit dem Xamarin Live P...
Xamarin ohne Mac und Android SDK? - So weit kommen Sie mit dem Xamarin Live P...
 
Typische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
Typische Sicherheitslücken in ASP.NET MVC und Web API AnwendungenTypische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
Typische Sicherheitslücken in ASP.NET MVC und Web API Anwendungen
 
Lokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-AppsLokale Datenhaltung in Xamarin-Apps
Lokale Datenhaltung in Xamarin-Apps
 
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
HTML5-Performance: So rennt Ihre App und nicht Ihre Anwender (weg)
 
Performance trotz Entity Framwork
Performance trotz Entity FramworkPerformance trotz Entity Framwork
Performance trotz Entity Framwork
 

Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene Liebesmüh?

  • 1. Das Repository-Pattern und der O/R-Mapper: Geniale Kombination oder vergebene Liebesmüh? André Krämer Softwareentwickler, Trainer, Berater
  • 3. Was machen wir eigentlich den ganzen Tag?
  • 4. Customer Order OrderItem Product orders* 0…* 1
  • 5. Name Street City Date Relation-ship Customer Orders Id Relation-ship OrderItem City Price Shipped
  • 6. DataReader (.NET 1.0 Style) using (connection) { SqlCommand command = new SqlCommand( "SELECT CategoryID, CategoryName FROM Categories;", connection); connection.Open(); SqlDataReader reader = command.ExecuteReader(); if (reader.HasRows) { while (reader.Read()) { Console.WriteLine("{0}t{1}", reader.GetInt32(0), reader.GetString(1)); } } else { Console.WriteLine("No rows found."); } reader.Close(); }
  • 7. 30 % der Arbeitszeit sind verloren
  • 11. OR-Mapper • Abbildung von Tabellen auf Klassen • Objektorientierte Sicht auf die Datenbank • Es muss kein SQL mehr geschrieben werden • Eine weitere Abstraktionsschicht
  • 12. Einsatz des O/R Mappers
  • 13. Beispiel entnommen aus: http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4
  • 14. Beispiel entnommen aus: http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4
  • 15. Beispiel entnommen aus: http://www.asp.net/mvc/tutorials/getting-started-with-ef-5-using-mvc-4
  • 16. public ActionResult Index() { } public ActionResult Details() { } public ActionResult Create() { } public ActionResult Edit() { } public ActionResult Delete() { } Daten-bank EF Context & Models
  • 17. Typischer Einsatz des O/R Mappers In Kombination mit dem Repository Entwurfsmuster
  • 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 […]
  • 23.
  • 24.
  • 26.
  • 27.
  • 28.
  • 29. public ActionResult Index() { } public ActionResult Details() { } public ActionResult Create() { } public ActionResult Edit() { } public ActionResult Delete() { } Daten-bank Repository EF Context & Models
  • 30. Gründe für den Einsatz
  • 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
  • 32. O/R Mapper + Repository =
  • 34.
  • 35.
  • 36. • Keine Filter in der Datenbank • Keine Sortierung in der Datenbank • Kein Include oder Prefetching
  • 37.
  • 38.
  • 39. Folgen der Abfragekapselung • Umfangreiche Repository Klassen mit zu vielen Verantwortlichkeiten • Geschäftslogik in der Datenzugriffsschicht
  • 40. Wiederverwendbarkeit von Abfragen Use Case 1 Use Case 2 Use Case 3 Use Case 4 Use Case 5
  • 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
  • 45. Was ist falsch an diesem Code?
  • 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
  • 53. Bonusfrage Was ist problematisch an folgendem Code?
  • 54.
  • 56. Einsatz von O/R Mappern im UI Code • Manchmal!
  • 57.
  • 59.
  • 60. Fazit
  • 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