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:
Der Aufruf an das Repository erfolgt über ObjectContext . Daher bekomme ich keine Abstraktion zwischen der Abfrage und dem Datenaccesslayer I möchte.
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 :)