Eu me ensinei sempre a lidar com qualquer código de acesso a dados em uma 'camada' completamente separada da minha lógica de negócios e código da interface do usuário. Essa sempre foi uma arquitetura muito boa para mim e quaisquer 'regras' ou práticas recomendadas que eu vejo ainda conseguem se encaixar nesse estilo de codificação, especialmente o Princípio de Responsabilidade Única .
Para a maioria dos meus projetos domésticos, eu usava meu próprio ORM que criei, que sempre pretendi criar código-fonte aberto. No entanto, desde então, o LINQ tornou-se disponível, o que era muito semelhante ao modo como meu ORM funcionava (mas ... melhor).
Não há nada que eu pudesse fazer anteriormente com meu próprio ORM que agora não posso fazer com LINQ (exceto bits da integração REST). Então minha pergunta é; LINQ é minha nova camada de acesso a dados? Preciso mais dessa camada? Minha BLL deveria apenas falar diretamente com o LINQ? Ou essa prática ainda é ruim?
Editar:
A pergunta original se referia ao LINQ to Entities, mas há muitas respostas interessantes sobre o LINQ to SQL. Quais são os pensamentos das pessoas sobre os dois? Eu entendo que o LINQ to SQL não pode realmente substituir um DAL, mas o Entity Framework poderia?
fonte
Linq não é sobre acesso a dados, você pode usar o linq para qualquer um
IEnumerable
.Você tentou projetar seu aplicativo sem pensar no banco de dados primeiro? Ou seja, implemente seu aplicativo e use algum tipo de repositório. Então você usa qualquer técnica para implementar esses repositórios. Dessa forma, você tem uma solução totalmente dissociada, na qual é possível conectar qualquer camada de acesso a dados que desejar.
Nessa camada de acesso a dados, você pode usar seu próprio ORM ou o Linq para sql, não importa, desde que a camada de acesso a dados implemente os repositórios que você definiu.
fonte
A menos que você queira que sua "camada lógica de negócios" aborde transações e desempenho de consultas, ainda é necessário um DAL.
O LINQ torna a declaração de consulta um processo em tempo de design (também conhecido como compilador verificado).
Os provedores de consulta LINQ (como LinqToSql e LinqToEntities) ainda fazem conversão em tempo de execução dessas consultas declaradas em texto sql. Em seguida, o DBMS ainda faz a interpretação da consulta em tempo de execução, a geração do plano de consulta em tempo de execução etc.
Estes são apenas uma pequena parte do DAL.
fonte