Je me suis toujours enseigné à gérer tout code d'accès aux données dans une «couche» complètement distincte de ma logique métier et de mon code d'interface utilisateur. Cela a toujours été une très bonne architecture pour moi et toutes les «règles» ou meilleures pratiques que je vois parviennent toujours à s'intégrer dans ce style de codage, en particulier le principe de responsabilité unique .
Pour la plupart de mes projets à la maison, j'utiliserais mon propre ORM que j'ai créé, que j'ai toujours eu l'intention de rendre open-source. Cependant, depuis lors, LINQ est devenu disponible, ce qui était très similaire à la façon dont mon ORM fonctionnait (mais ... mieux).
Il n'y a rien que je pouvais faire auparavant avec mon propre ORM que je ne peux pas faire maintenant avec LINQ (sauf des bits de l'intégration REST). Donc ma question est; LINQ est-il ma nouvelle couche d'accès aux données? Ai-je encore besoin de cette couche? Mon BLL doit-il simplement parler directement à LINQ? Ou est-ce toujours une mauvaise pratique?
Éditer:
La question d'origine faisait référence à LINQ to Entities, mais il existe de nombreuses réponses intéressantes concernant LINQ to SQL. Que pensent les gens des deux? Je suppose que LINQ to SQL ne peut pas vraiment remplacer un DAL, mais l'entité Framework pourrait-elle?
la source
Linq ne concerne pas l'accès aux données, vous pouvez utiliser linq vers n'importe lequel
IEnumerable
.Avez-vous essayé de concevoir votre application sans penser à la base de données au départ? Autrement dit, implémentez votre application et utilisez une sorte de référentiel. Ensuite, vous utilisez n'importe quelle technique pour implémenter ces référentiels. De cette façon, vous avez une solution totalement découplée où vous pouvez brancher la couche d'accès aux données que vous souhaitez.
Dans cette couche d'accès aux données, vous pouvez utiliser votre propre ORM ou vous pouvez utiliser Linq pour sql, cela n'a pas d'importance tant que la couche d'accès aux données implémente les référentiels que vous avez définis.
la source
À moins que vous ne vouliez que votre "couche de logique métier" traite les transactions et les performances des requêtes, il existe toujours un besoin d'un DAL.
LINQ fait de la déclaration de requête un processus de conception (aka, vérifié par le compilateur).
Les fournisseurs de requêtes LINQ (tels que LinqToSql et LinqToEntities) effectuent toujours la conversion au moment de l'exécution de ces requêtes déclarées en texte sql. Ensuite, le SGBD effectue toujours l'interprétation des requêtes au moment de l'exécution, la génération du plan de requête au moment de l'exécution, etc.
Ce ne sont qu'une petite partie du DAL.
la source