Müssen wir bei der Verwendung von LINQ to SQL oder Entity Framework die Anwendung in 3 Schichten aufteilen: BLL, DAL, Interface?
Antworten
Zu viele Anzeigen?Tun Sie, was für Sie funktioniert Sie . Eine Hochzeitswebsite mit einer Handvoll Links zu erstellen und 5 Inhaltsseiten aus der Datenbank herauszuholen? Mehr als 1 Ebene scheint ein gewaltiger Overkill zu sein. Auf der anderen Seite, für ein sehr komplexes oder großes Projekt: Ich denke, man sollte zumindest eine gewisse Trennung anstreben, denn das spart Zeit, Verwirrung und Verstand.
Es kommt darauf an, woran Sie arbeiten und wie viel Arbeit Sie dafür aufwenden müssen. Letztlich kommt es darauf an, was Sie und Ihr Team bevorzugen . Es gibt keine rechts Antwort: Es kommt darauf an, was der Situation entspricht.
In Projekten, die ich entwickle, finde ich es sinnvoll, eine DL zu erstellen, selbst wenn ich Linq2Sql für den Datenzugriff verwende.
Der Hauptgrund dafür ist, dass viele der Aufrufe an die DL, um ein oder mehrere Geschäftsobjekte aus der DB abzurufen, tatsächlich mehr als einen Aufruf an die Datenbank erfordern, insbesondere wenn eine Eager-Loading-Strategie implementiert wird, und dass beim Speichern eines Geschäftsobjekts, dessen Daten in mehreren Tabellen gespeichert sind, eine Transaktion über mehrere Aufrufe an die Datenbank aufgebaut werden kann.
Die Geschäftsschicht braucht das nicht zu wissen; sie sollte in der Lage sein, einen einzigen Aufruf an die DL zu tätigen und es der DL zu überlassen, alle mühsamen Abfragen und Zusammenstellungen von Daten zu Geschäftsobjekten vorzunehmen.
Ich schließe mich @MikeJacobs an.
Ich habe tatsächlich eine LINQ2SQL-Bibliothek geschrieben, die ALLE DataContext Sachen abstrahiert, und alle .Insert(), .Execute() und .SubmitChanges().
Es ist wirklich schön, wenn man das einfach weglassen kann. In LINQ2SQL sind Sie immer noch davon abhängig, dass alle Ihre Schichten über die LINQ2SQL-Entitäten wissen, aber meine obersten Schichten senden sehr selten komplexe Lambdas an die DAL, das meiste davon wird in der DAL getan.