ASP.NET Core - MongoDB Repository Pattern & Unit Of Work
A implementação de repositórios genéricos e Unit Of Work são tarefas complexas no MongoDB. A falta de mecanismos no componente dificultam sua adoção. Veja neste artigo como implementar.
Unit of Work
O Unit Of Work é um padrão usado para agrupar uma ou mais operações (geralmente operações de banco de dados) em uma única transação ou “unidade de trabalho”, de modo que todas as operações sejam aprovadas ou reprovadas como uma só.
Repository Pattern
Repositórios são classes ou componentes que encapsulam a lógica necessária para acessar o banco de dados (repositório). Centralizam a funcionalidade comum de acesso a dados. Proporcionando melhor manutenção e desacoplando a infraestrutura da camada de domínio.
Beneficios
Desacoplamento e reusabilidade de código.
Criar um Repository Pattern com Generics no .NET é permite implementar as operações de CRUD com muito pouco esforço e código.
Juntamente com o Unit Of Work, caso aconteça algum erro no fluxo da operação, evita que seja feita qualquer modificação no banco.
E esse controle está na aplicação ao invés de abrir transações no banco e evitar locks nas tabelas.
E o MongoDB onde fica?
O MongoDB não tem controle de transações no driver do .NET. Com a popularidade do MongoDB cada vez maior, mais e mais sistemas estão sendo implementados com ele. Logo este artigo vai abordar como implementar um.
Implementação
Para esta implementação, será necessário os componentes MongoDB.Driver e ServiceStack.Core.
Para instalar os componentes, abra o Package Manager (View > Other Windows > Package Manager Console) e digite os comandos:
Install-Package ServiceStack.Core
Install-Package MongoDB.Driver
Generic Repository
Para implementar o padrão Repository Pattern, será utilizado uma classe com generics abstrata com as operações de CRUD.
Interface
Implementação
Cada Model, terá sua própria implementação. Por exemplo uma classe Product:
Unit of Work
O Unit Of Work será responsável por executar as transações que os Repositories fizeram. Para que esse trabalho seja feito, uma Context do Mongo deverá ser criada. Esta Context será a conexão entre o Repository e o UoW.
Mongo Context
UoW implementação
Configurando o Startup.cs
Para finalizar a configuração, abra o Startup.cs do projeto e adicione as configurações do DI.
Download
O código do projeto está disponível no meu GitHub
Feedback!
Me diga o que achou? Deixe teu comentário, suas impressões e vamos convesar!