Welche Vor- / Nachteile hat die Rückgabe von POCO-Objekten aus einem Repository gegenüber EF-Entitäten?

8

Nach der Art und Weise, wie Rob das tut, habe ich die Klassen, die vom SQL-Wizard von Linq generiert werden, und dann eine Kopie dieser Klassen, die POCOs sind. In meinen Repositorys gebe ich diese POCOs statt der Linq an SQL-Modelle zurück:

%Vor%

Ich verstehe, dass der Vorteil darin liegt, dass die POCO-Modelle leichter instanziiert werden können, wodurch mein Code testbarer wird.

Ich gehe jetzt von Linq zu SQL über zu Entity Framework und bin ungefähr zur Hälfte durch ein EF-Buch gegangen. Es scheint, dass es eine Menge Güte ist, die ich verlieren werde, indem ich POCOs aus meinen Repositorien zurückgebe und nicht die EF-Entitäten.

Ich habe Unit-Tests immer noch nicht wirklich begrüßt, daher habe ich das Gefühl, dass ich viel Zeit damit verschwenden muss, diese zusätzlichen POCOs zu erstellen und den Code zu schreiben, um sie zu füllen, wenn alles, was ich zu gewinnen scheint, testbarer Code ist Ich werde auch viele der Vorteile des EF verlieren, da ich meine Objekte nicht verfolgen kann.

Hat jemand einen Rat für ein relatives newb zu all diesen ORM / Repository Sachen?

Anthony

    
littlecharva 11.05.2009, 08:52
quelle

3 Antworten

6

Ein weiterer Grund, warum die automatisch generierten Objekte nicht gefallen (in LINQ to SQL zum Beispiel), liegt an ihrer eingebauten "Magie".

Normalerweise ist die Magie unsichtbar, und Sie bemerken sie nie. Wenn Sie jedoch versuchen, Objekte zu serialisieren und dann zu deserialisieren (z. B. bei der Verwendung von Webdiensten), ist die interne Verbindung zur Datenquelle unterbrochen und speziell Hacks müssen eingesetzt werden, um "die Magie zurückzubringen".

Mit POCOs müssen Sie sich nicht um solche Dinge kümmern und können eine bessere Trennung zwischen Ihren Daten- und Service-Schichten erzielen. Der Nachteil ist natürlich, dass man viel langweiliges POCO schreiben muss - & gt; magisches Objekt und magisches Objekt - & gt; POCO-Umwandlungscode Aber am Ende denke ich, dass es sich normalerweise lohnt, besonders für große oder komplexe Projekte.

    
Eric Petroelje 13.05.2009, 19:44
quelle
4

Der Hauptgrund ist, dass viele Menschen ihr Modell gerne mit einer bestimmten Denkweise entwickeln: wie DDD zum Beispiel. Sie möchten vielleicht ein bestimmtes Muster (wie Spec oder State) für Dinge wie Status (anstelle von Enums) verwenden - oder Sie möchten eine Factory für Instanziierung verwenden.

OO bricht, wenn Sie versuchen, Tabellen als Objekte zu verwenden, wenn die Dinge komplexer werden. Einfache Websites funktionieren OK - aber wenn Sie zu großen großen Dingen kommen, wird es hässlich.

Also - wie immer - hängt es davon ab, von was Sie glauben, dass sich Ihr Projekt entwickeln wird.

    
user1151 13.05.2009 18:50
quelle
2

Meine Erfahrung ist, dass, wenn Sie beginnen, einige komplexe Abfragen zu schreiben. Die Include-Methode ist wertlos und Sie werden sich entweder selbst finden:

a) Schreiben einer Menge von Abfragen, um die gewünschten Daten zu erhalten oder b) Missbrauch von anonymen Typen, um die Daten in einer einzelnen Abfrage zu laden und dann viel Code zu schreiben, nur um diese Daten an Ihre Entitäten zu übergeben.

POCOs sind der Weg zu gehen, IMHO.

    
Drevak 13.05.2009 19:35
quelle