Dois ORM’S trabalhando juntos? É possivel !

arq_hibrida13
Há um tempo estava lendo sobre o  Princípio de Pareto  e como ele é aplicado em várias áreas profissionais para comparar causas e efeitos.

Será que podemos aplicar o princípio de pareto aos sistemas que desenvolvemos e dizer que o consumo desse sistema pode ser dividido em 80% de ações de consultas para 20% de outras operações?

arq_hibrida1

Isso é só uma suposição ok? mas na grande maioria dos sistemas que trabalhei as funcionalidades de consulta sempre foram as mais requeridas e as que sempre necessitaram de mais cuidado com relação a performance.

Para efetuar as operações com o banco de dados existem várias abordagens, alguns optam por fazer na mão, criando suas querys e comandos sql e outros optam por usar os  ORM’s (frameworks object-relational mapping) que conversam com o repositório sem muito trabalho de codificação por parte do desenvolvedor.

São exemplode ORM’s o Entity Framework e o Nhibernate.

Os ORM’s facilitam a vida do desenvolvedor, mas segundo muitos artigos que li na internet em alguns pontos podem pecar no quesito performace.

E neste ponto que entra os chamados Micro-Orms como é o caso do Dapper criado pela equipe do StackOverFlow, ele é mais leve e mais performático que um Full-Orm.

Com essas informações porque então não usar os dois em uma mesma solução? a praticidade do EF para fazer os comandos de escrita (insert, update e delete) e a performance do Dapper para os comandos de select.

Este é o  cenário que estou disponibilizando neste projeto de exemplo, uma aplicação que trabalhe com os dois ORM’s de maneira fácil, permitindo que o desenvolvedor escolha qual tecnologia irá utilizar dentro do seu código.

arq_hibrida12

Hoje quando se fala de separar querys de comandos alguns já pensam em CQRS (Command Query Responsability Segregation),  não sei afirmar se é um pattern ou uma abordagem arquitetural.

Para implementar um CQRS talvez voce precise de um banco NoSql para efetuar suas consultas, um ServiceBus para integração, implementar Handlers enfim pode não ser uma tarefa fácil.

Neste exemplo, basicamente eu separei as operações de insert, update e delete para o EF e as querys para o  Dapper deixando a cargo do desenvolvedor escolher qual tecnologia usar dentro da classe de serviço.

Para facilitar existe na solução um projeto ConsoleApplication para criar as tabelas do exemplo, eu usei o SQL SERVER EXPRESS 2014 neste exemplo.

Todas as instruções estão na  página do projeto no meu Github.

É um projeto bem simples, minha intenção é somente mostrar uma forma de trabalhar com as duas ferramentas (EF + DAPPER) e mostrar como deixar a aplicação mais rápida uma vez que com o Dapper você pode criar suas querys na mão e ter total certeza que estejam performáticas.

A dica é jogar na mão de um DBA a construção das queries hahahhah, bom só uma brincadeira!

Abraços e se ajudou comenta ae!

7 comments

  1. Legal Marcelo!
    Bem interessante seu post. Quando vi a primeira imagem já pensei assim “o cara usou metade do principio de CQRS” hehehe.
    Mas eu penso que a ideia do principio arquitetural CQRS deve fazer sentido para a demanda que você tem. Eu entendo perfeitamente que se no DB vc não tem muita concorrência de IO poderia sim implementar CQRS utilizando somente um DB. No meu caso, eu tenho um banco que possui algumas tabelas quentes que recebem muito IO e, pretendo criar um segundo banco NoSQL somente para estas tabelas e ai sim, deixar a QueryStack para recuperação de dados somente para estas tabelas no banco segregado.
    Um abraço
    Romero Dias

    1. E isso ae Romero! o problema que vejo é que nem todas empresas estão preparadas para criar uma
      arquitetura com CQRS por exemplo, muitas ainda nem pensam em trabalhar com um banco NoSql (não que precise)
      mas foge um pouco do conceito que elas estão acostumadas. O problema é sempre o legado.
      Um abraço e obrigado por comentar, todo comentário ajuda!!

  2. Olá Marcelo, Bom Dia,

    Muito obrigado pelo artigo estou trabalhando em cima dele ! 🙂

    Se vc pudesse escrever um artigo explicando seu ponto de vista sobre o conceito de DDD eu acharia muito legal tb !!! 🙂

    Abraços,

    Carlos

Leave a Reply

O seu endereço de e-mail não será publicado.