Arquitetura Repository Pattern

Utilizando Banco de dados Sqlite e padrões de arquitetura

Fala Galera, hoje eu tinha uma missão de exemplificar o consumo de serviços de Push Notifications através de terceiros, no caso o Pushwoosh. Mas durante o final de semana, iniciei o exercício de construir um App que de fato proporcionasse interação mobile.

Com isto, eu busquei unir o útil ao agradável também criando uma POC para a minha empresa. Construí então um App que fizesse a busca por voz (para Android, por hora)!

Então isto quer dizer que este post é sobre este assunto? Ainda não, prometo que na semana que vem isto será o meu tópico, mas hoje eu queria falar de algo também inserido nesta POC, mas outrora um pouco esquecido durante nossos ciclos de desenvolvimento.

Como já vimos aqui no blog mesmo, nosso querido Albert já discutiu sobre arquitetura e este é sempre um ponto interessante para se discutir.

Arquitetura em si, abstrai um pouco focos como a plataforma, a linguagem e um pouco do fundamento da aplicação em si, dando mais ênfase nos alicerces do software/App.

Modelo de Arquitetura

Hoje eu quero então falar sobre um modelo de arquitetura para banco de dados, um tanto quanto utilizado no mundo de softwares e que também pode ser concebido para a realidade de Apps de mobilidade. Estou falando do Pattern Repositório.

Comumente iremos trabalhar em nossas aplicações com modelo de armazenamento de dados. Olhando para o cenário mobile nossas opções locais são limitadas, já no horizonte de aplicações WEB ou DESKTOP estamos mais ‘completos’. Mas a certeza é que o Pattern Repositório atende a qualquer um dos cenários, onde somos abastecidos de uma ‘interface’ de banco de dados, como SQLITE, SQLSERVER, Oracle, MongoDB, etc.

Junto ao pattern do Repositório, vamos também aplicar o conceito de generics. Isto porquê desta forma provemos um baixo nível de acoplamento entre o nosso Repositório e o nosso domínio, objeto de armazenamento do Repositório.

Criando a Interface

Iniciamos então definindo um modelo de interface da nossa arquitetura que constituirá os acessos necessários da nossa abstração. Vamos definir acessos básicos ao nosso modelo de dados sendo eles:

  • Adicionar (add)
  • Remover (delete)
  • Atualizar (update)
  • Buscar Por ID (GetByID)
  • Buscar Por Filtro (GetByFilter)
  • Buscar Todos (GetAll)

Obviamente outros acessos podem ser criados, isso parte de cada necessidade.

Desta forma podemos definir esta interface (utilizando C#) da seguinte maneira

Arquitetura Repository Pattern - IRepositorioBase
Arquitetura Repository Pattern – IRepositorioBase

Veja que temos o emprego de um “T” em nosso código. Este “T” nos apresenta ao conceito de Generics, como falado anteriormente. Isto nos permite utilizar esta abordagem, informado esta interface para uso com quaisquer objetos que eu queira que substitua o T, como por exemplo, Pessoa.

Criando o Repositório

Continuando, agora que temos nossa interface, podemos construir um modelo de classe para atender a este contrato. Podemos definir então uma classe de Repositório Base da seguinte maneira (aqui exemplificado através do SQLITE como conector ao banco de dados).

(por print está dividido em duas imagens, mas trata-se de uma classe única)

Arquitetura Repository Pattern - RepositorioBase - 1 Arquitetura Repository Pattern - RepositorioBase - 2

Outro bom apontamento que posso apontar, neste exemplo com o SQLITE, é do uso da instrução LOCK, com ela garantimos a integridade de acesso ao banco de dados SQLite, pois dentro de cada instrução estamos destacando com o .NET a execução da “transação”, impedindo problemas de ocupação de recursos dentro de execuções de chamadas ao banco de dados.

Também vejo válido outro ponto, pouco explorado por outros textos, da utilização do objeto do namespace System.Linq, o Expressions. Com ele podemos construir semanticamente um objeto de filtro utilizando da técnica generics. Vejam que neste exemplo o nosso repositório base desconhece qual tipo T ele atenderá, bem como a minha clausula de filtro. Seguindo nosso exemplo, eu poderia estar tratando de um repositório que atende ao objeto de domínio Pessoa e precisar fazer um filtro por CPF, teríamos algo parecido com isto

Arquitetura Repository Pattern - Expressions

Aplicando na prática

Adiante, por fim teríamos a então utilização deste Repositório Base aplicado dentro do nosso negócio. No caso para  atender ao nosso objeto/tabela Pessoa.

Arquitetura Repository Pattern - RepositorioPessoa

E este é o pattern do Repositório Base com o conceito de Generics. Este pattern é muito seguro e promove um alto nível de desacoplamento em nossas soluções e pode ser ainda combinado com outras boas estratégias de desenvolvimento.

Para entender mais sobre os Pattern Microsot de desenvolvimento acesse a MSDN

E você leitor, utiliza outros patterns? Já conhecia o Repo Pattern? Tem dúvidas ou sugestões? Deixe um comentário logo abaixo 😀

Utilizando Banco de dados Sqlite e padrões de arquitetura
2.5 (50%) 12 votos

Rodrigo Amaro

Desenvolvedor, apaixonado por tecnologia. Gosta de fazer um pouco de tudo, acredita que pode fazer a diferença no mundo através da tecnologia.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

%d blogueiros gostam disto: