Ich habe mir selbst beigebracht, Datenzugriffscode immer in einer völlig separaten Schicht zu meiner Geschäftslogik und meinem UI-Code zu behandeln. Dies war schon immer eine sehr gute Architektur für mich, und alle „Regeln“ oder Best Practices, die ich sehe, passen immer noch in diesen Codierungsstil, insbesondere in das Prinzip der Einzelverantwortung .
Für die meisten meiner Heimprojekte würde ich mein eigenes ORM verwenden, das ich erstellt habe und das ich immer als Open Source machen wollte. Seitdem ist jedoch LINQ verfügbar geworden, was der Funktionsweise meines ORM sehr ähnlich war (aber ... besser).
Mit meinem eigenen ORM konnte ich bisher nichts tun, was ich jetzt mit LINQ nicht tun kann (außer Teilen der REST-Integration). Meine Frage ist also: Ist LINQ meine neue Datenzugriffsschicht? Benötige ich diese Schicht überhaupt noch? Sollte meine BLL nur direkt mit LINQ sprechen? Oder ist diese schlechte Praxis immer noch?
Bearbeiten:
Die ursprüngliche Frage bezog sich auf LINQ to Entities, aber es gibt viele interessante Antworten zu LINQ to SQL. Was denken die Menschen über beide? Ich nehme an, dass LINQ to SQL einen DAL nicht wirklich ersetzen kann, aber könnte das Entity Framework?
quelle
Bei Linq geht es nicht um Datenzugriff, Sie können Linq für jeden verwenden
IEnumerable
.Haben Sie versucht, Ihre Anwendung zu entwerfen, ohne zuerst an die Datenbank zu denken? Implementieren Sie also Ihre Anwendung und verwenden Sie eine Art Repository. Dann verwenden Sie eine beliebige Technik, um diese Repositorys zu implementieren. Auf diese Weise haben Sie eine vollständig entkoppelte Lösung, bei der Sie jede gewünschte Datenzugriffsschicht anschließen können.
In dieser Datenzugriffsschicht können Sie Ihr eigenes ORM oder Linq für SQL verwenden. Dies spielt keine Rolle, solange die Datenzugriffsschicht die von Ihnen definierten Repositorys implementiert.
quelle
Sofern Sie nicht möchten, dass Ihre "Geschäftslogikschicht" Transaktionen und die Abfrageleistung berücksichtigt, ist weiterhin eine DAL erforderlich.
LINQ macht die Abfragedeklaration zu einem Entwurfsprozess (auch bekannt als Compiler-geprüft).
LINQ-Abfrageanbieter (wie LinqToSql und LinqToEntities) konvertieren diese deklarierten Abfragen weiterhin zur Laufzeit in SQL-Text. Dann führt das DBMS weiterhin die Interpretation von Laufzeitabfragen, die Generierung von Laufzeitabfrageplänen usw. durch.
Dies ist nur ein kleiner Teil des DAL.
quelle