DAL em C#: Simplifique a sua vida e torne a manipulação de dados eficiente.

Para quem ingressa no universo de desenvolvimento backend, já se depara com a manipulação de dados, não importa qual SGDB você utilize a persitencia de dados é algo necessário em toda aplicação. A comunidade de código aberto trabalha para tornar fácil a manipulação dos dados, criando vários ORM que adiantam o nosso dia-a-dia. Eu já estudei Java no início, e lembro quando precisava criar um arquivo do tipo: ArquivoDAO.java. Recordo claramente que apenas seguia o que a videoaula estava me repassando, sem entender o que realmente estava acontecendo no código. Ao iniciar meus estudos em C#, já com certa experiência de mercado, me deparo com a criação de ArquivosDAL.cs e lembro dos estudos do Java, só que não era mais o DAO, e sim o DAL. Mas qual a diferença entre essa sopa de letras?

Exemplificando a diferença entre DAO e DAL

DAO (Data Access Object) e DAL (Data Access Layer) são dois conceitos de arquitetura de software que têm algumas diferenças. O objetivo principal do DAO é encapsular a lógica de acesso aos dados, abstraindo as operações e oferecendo métodos como: Criar, deletar, atualizar e recuperar, o nosso famoso "CRUD". Basicamente, o DAO preenche a lacuna entre os controllers e o SGDB. O DAL é mais abrangente e engloba não apenas o DAO (Data Access Object), mas também faz a conexão entre o banco de dados, consultas SQL, trata erros e exceções relacionadas ao acesso ao banco. O DAL foi projetado para ser reutilizável e independente da lógica de negócios e da implementação de armazenamento de dados. Isso permite que o aplicativo seja facilmente modificado ou estendido sem afetar o código de acesso a dados subjacente.

A importância de utilizar DAL

Utilizar um DAL nas aplicações facilita a manutenção, e a lógica do negócio não tem a preocupação de como acessar os dados, não importando se utiliza um banco de dados relacional ou não relacional, dando a liberdade de migrar de SGDB quando necessário. O DAL pode ser apenas uma classe ou várias classes que interagem diretamente com os dados, facilitando a persistência de dados. Veja um exemplo de uma classe DAL genérica que eu criei nos meus estudos de persistência de dados em C#:

`public class DAL where T : class { private readonly ScreenSoundContext context;

public DAL(ScreenSoundContext context)
{
    this.context = context;
}

public IEnumerable<T> Listar()
{
    return context.Set<T>().ToList();
}
public void Adicionar(T objeto)
{
    context.Set<T>().Add(objeto);
    context.SaveChanges();
}
public void Atualizar(T objeto) 
{
    context.Set<T>().Update(objeto);
    context.SaveChanges();
}
public void Deletar(T objeto)
{
    context.Set<T>().Remove(objeto);
    context.SaveChanges();
}

public T? RecuperPor(Func<T, bool> condicao) 
{
    return context.Set<T>().FirstOrDefault(condicao);
}

public IEnumerable<T> ListarPor(Func<T, bool> condicao)
{
    return context.Set<T>().Where(condicao);
}

}`

Perceba que também utilizei métodos e funções que se conectam com o banco de dados e realizam as operações CRUD. Gostei realmente de utilizar arquivos DAL em C#, juntamente com a facilidade de um ORM, no meu caso, o Entity Framework.