Ich versuche ein bisschen mit Entity Framework zu arbeiten und habe eine Frage bezüglich der Trennung von Ebenen.
Ich benutze normalerweise den UI -> BLL -> DAL-Ansatz und frage mich, wie ich EF hier verwenden soll.
Mein DAL wäre normalerweise so ähnlich
GetPerson(id)
{
// some sql
return new Person(...)
}
BLL:
GetPerson(id)
{
Return personDL.GetPerson(id)
}
Benutzeroberfläche:
Person p = personBL.GetPerson(id)
Meine Frage ist nun: Da EF mein Modell und mein DAL erstellt, ist es eine gute Idee, EF in mein eigenes DAL zu packen, oder ist es nur Zeitverschwendung?
Wenn ich EF nicht umbrechen muss, würde ich meine Model.esmx trotzdem in eine eigene Klassenbibliothek einfügen oder wäre es in Ordnung, sie einfach in meine BLL einzufügen und dort einige zu bearbeiten?
Ich kann den Grund nicht wirklich erkennen, EF in meine eigene DAL zu packen, aber ich möchte wissen, was andere Leute tun.
Anstatt das oben Genannte zu haben, würde ich die DAL weglassen und einfach tun:
BLL:
GetPerson(id)
{
using (TestEntities context = new TestEntities())
{
var result = from p in context.Persons.Where(p => p.Id = id)
select p;
}
}
Was ist zu tun?
quelle
Sie müssen Ihr EDMX in nichts einwickeln.
Wenn Sie die Möglichkeit eines Wechsels von EF zu einem anderen Ansatz vorhersehen können, möchten Sie möglicherweise Ihre Geschäftsobjekte (unter Ausnutzung der Teilklassen) erweitern, um Schnittstellen zu implementieren, die in einer separaten Geschäftsobjektschicht definiert sind.
Dann beschäftigen Sie sich in Ihrem Code nur mit diesen Schnittstellen und nicht mit den konkret generierten Klassen. Möglicherweise ist ein kleiner Klebercode erforderlich, um dies zusammenzuhalten. das mit dem EDMX kann dein DAL sein.
quelle
Es gibt zwei allgemeine Herangehensweisen an die Schichtung: strikte Schichtung und entspannte Schichtung.
Bei einem streng geschichteten Ansatz müssen die Komponenten in einer Ebene nur mit Gleichaltrigen und mit der direkt darunter liegenden Ebene interagieren.
Bei einer entspannten Anwendung mit mehreren Ebenen werden die Einschränkungen gelockert, sodass eine Komponente mit Komponenten aus einer beliebigen unteren Ebene interagieren kann.
Die Verwendung einer entspannten Schichtung kann die Effizienz verbessern, da das System einfache Anrufe nicht von einer Schicht zur nächsten weiterleiten muss. Auf der anderen Seite bietet die Verwendung einer entspannten Schichtung nicht das gleiche Maß an Isolation zwischen den Schichten und macht es schwieriger, eine niedrigere Schicht auszutauschen, ohne die höheren Schichten zu beeinträchtigen.
Bei großen Lösungen mit vielen Softwarekomponenten ist es üblich, eine große Anzahl von Komponenten auf derselben Abstraktionsebene zu haben, die nicht zusammenhängend sind. In diesem Fall kann jede Schicht weiter in ein oder mehrere zusammenhängende Teilsysteme zerlegt werden. Abbildung 2 zeigt eine mögliche UML-Notation (Unified Modeling Language) zur Darstellung von Ebenen, die aus mehreren Subsystemen bestehen.
Fazit: Wenn Sie die mittlere Schicht nicht brauchen, verlieren Sie sie; Nicht alle Anwendungen erfordern den gleichen Ansatz, und das Hinzufügen eines Layers nur zum Zwecke des Layerns wirkt sich nachteilig auf die Komplexitätskosten und die Wartung aus.
quelle