IoC e Cache
IoC é uma daquelas palavras que as pessoas adoram usar em reuniões sobre arquitetura para parecerem espertas. Ajuda a separar partes do sistema, facilita testes e isola o domínio. Tem também uma técnica que deixa você colocar novas funções em um componente e ainda usar a função original normalmente.
Performance
Se performance fosse uma pessoa, seu sobrenome seria Cache. Para os fãs de tecnologia, isso é quase uma crença.
Muita gente acha que melhorar a performance é só trabalhar no código, melhorar uma consulta de banco ou adicionar alguns índices. Mas quando seu sistema recebe muitas requisições por minuto, quem você precisa checar é sua estratégia de cache.
O problema
Dá uma olhada nesse código aqui:
Veja como a Controller
depende de um ICarStore
. Ela pega dados do banco e retorna uma resposta. Parece simples, mas não é bem assim.
Como adicionar Cache sem mudar a Controller ou o CarStore?
Imagine que o ICarStore
já está no seu Nuget e não pode ser alterado. E está mais devagar do que deveria.
A técnica
A técnica usa IoC. O truque é em duas etapas.
- Criar uma classe de cache que receba o
ICarStore
e que também implemente essa interface. - Registrar a classe que implementa o
ICarStore
e mudar o registro dela no DI.
Primeira etapa
Olha esta implementação:
Aqui temos uma classe que também implementa ICarStore
.
Segunda etapa
Em algum lugar do seu código está o registro da interface com sua implementação.
Vamos mudar o DI do ASP.NET Core.
Primeiro, o ASP.NET Core registra ICarStore
com CarStore
. Depois, o código muda o registro para usar nosso componente de cache.
Nota: Isso é uma demo. Normalmente há uma lógica sobre quando usar ou não esse substituto.
Confira o CarCachingStore
completo:
Casos de Uso
Um bom caso para usar Cache é quando a aplicação só conhece uma interface e não importa de onde vem o dado. Assim, evita ter que criar implementações como:
- ICarCacheStore
- ICarStore
Decida quando usar o Cache conforme o ambiente, usando dados novos em desenvolvimento.
Quem utiliza?
Aprendi essa técnica explorando o código do IdentityServer4, usado para gerenciar cache.
Download

O código do projeto está no meu GitHub. Dá uma olhada antes que alguém diga que você está inventando termos mágicos na arquitetura.