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!