5

Wir sind dabei, ein neues Projekt ähnlich einem vorherigen zu starten. Ich könnte nur das alte Design kopieren, aber ich bin nicht allzu zufrieden mit dem alten Design.Verwenden von Entity Framework mit Repository-Muster in WinForms MDI

Es ist ein "Standard" Business-System (Verkauf, Inventur, Warehousing usw.), das auf .Net 3.5 (Winforms MDI) mit Entity Framework im Backend aufbaut.

Alle Formulare erben von einer Basisform (die Windows.Form erbt). Das Formular stellt eine Eigenschaft mit dem Namen ObjectContext bereit, die beim ersten Aufruf einen neuen ObjectContext instanziiert. Das ist ein ziemlich gutes UnitOfWork, denke ich, dass alle Daten in jeder Form isoliert sind.

Jedoch.

Ich habe alle Abfragen und allgemeine CRUD in "Armen mans Repositories" gekapselt. Diese Repositories werden als Eigenschaften des ObjectContext verfügbar gemacht.

Also, wenn ich an ein Formular binden und bestellen wollte, würde ich OrderLinesGrid = ObjectContext.OrderRepository.GetOrderLinesByID (orderID) aufrufen.

Die OrderRepository erhält einen Verweis auf die Object für das Formular erstellt, wie dies

(In meiner Teilobject Klasse)

Private _OrderRepository as OrderRepository 
Public ReadOnly Property OrderRepository as OrderRepository 
Get 
if _orderrepository is nothing then 
_orderrepository = New OrderRepository(me) 
end if 
return _orderrepository 
End Get 
End Property 

Was ich nicht mag, ist dies:

  1. Der Aufruf an das Repository erfolgt über ObjectContext . Daher bekomme ich keine Abstraktion zwischen der Abfrage und dem Datenaccesslayer I möchte.

  2. Für jeden neuen Typ in meiner Domain I eine Eigenschaft in meinem Object erstellen müssen

Mein Aufruf an OrderRepository sollte nur Domain-Objekte zurückgeben und sich keine Sorgen darüber, wie es beibehalten wird. Außerdem kann ich nicht jedes Repository seinen eigenen ObjectContext haben, da dies erfordern würde, dass ich Objekte anhefte und abtrenne, wenn ich z. B. Country auf eine Order.Country -Eigenschaft verweise.

würde ich irgendwelche Ideen und Feedback zu diesem Entwurf schätzen :)

Antwort

0

ich Ihnen vorschlagen "onion" principle, Repository pattern und LUW Muster erforschen. Es gibt viele Beispiele im Internet.

Im Wesentlichen verwenden Sie POCO Model Core Project. Keine Hinweise auf DAL-Projekt. Sie deklarieren Schnittstellen für das Repository und die Luw-Muster im CORE-Projekt.

So jetzt ein

UI layer -> instantiate context and DAL Object eg repository -> inject into CORE services. 

Auch dieser Ansatz verbunden ist Inversion of Control oder Dependency Injection-Muster.

Wenn Sie eine testgesteuerte Entwicklung gegen Dummy-Repositories verwenden, können Sie sicherstellen, dass die Entwurfsprinzipien eingehalten werden.

Verwandte Themen