Repository Pattern com dotnet-core, Entity Framework Core e PostgreSQL.

Olá ! Como vai você ?

Estou aqui, para descrever o que é o padrão de projeto Repository e demonstrar a implementação deste padrão com dotnet-core.

Como Martin Fowler descreveu o padrão de projeto Repository: “O repositório faz intermédio entre o domínio de negócio e as camadas de mapeamento e acesso a dados”.

O padrão Repository encapsula o acesso a dados, de maneira genérica, para que o acesso a dados além, de ser reaproveitado, seja simples de ser alterado.

Para tal, vamos implementar o padrão de projetos, utilizando dotnet-core e Entity Framework, para persistir dados com PostgreSQL.

O primeiro passo, é criar o projeto no .Net Core, escolhendo o diretório e executando o comando:

Após criado, o arquivo de projeto(.csproj) deverá ser alterado, e incluído a tag <ItemGroup> com as bibliotecas necessárias para que sejam utilizados o Entity Framework e o Driver de conexão com o banco de dados(no caso do PostgreSQL, será utilizado o Driver NpgSql).

Com tudo instalado, é hora de começar, quando abrir o Visual Studio Code será solicitado para que os pacotes sejam restaurados, logo, faça-o e adicione os assets para conseguir depurar.

Agora, com um projeto configurado, podemos iniciar a implementação do padrão, com uma classe de contexto do Entity Framework, de maneira genérica.

Logo após a implementação do Contexto Genérico do Entity Framework, iremos implementar a interface, para implementação do repositório genérico.

E consequentemente, devemos ter uma classe que implemente essa interface, gerando assim, a facilidade de acesso à dados, da seguinte forma:

Agora, iremos criar nossas classes de mapeamento de tabelas ao banco, e como podemos perceber na classe de contexto, ele sempre espera o contexto de uma classe que seja do tipo Entidade, logo, criaremos ela:

E agora sim, podemos criar uma classe que representará nossa tabela no banco de dados, que OBRIGATORIAMENTE deverá herdar a classe de entidade, esta classe será a classe de usuários.

Ok, então teóricamente temos todo o ecossistema para utilização do banco de dados, vamos ver se funciona ?

Primeiro, altere a string de conexão na classe de contexto, para que aponte para o seu banco de dados.

Depois, abra a classe Main.cs e escreva o seguinte código:

Podemos depurar, e ver que realmente foi inserido um objeto na tabela Usuario no banco dados, com os dados passados, e o mesmo foi consultado.

Neste exemplo, estamos utilizando o método de acesso à dados, sem controle de transação, o que nem sempre é bom, portanto, no próximo post, iremos demonstrar como realizar controle de transação no Repository Pattern com EntityFramework.