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.

Slab Of Green And Gold

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.

  1. Criar uma classe de cache que receba o ICarStore e que também implemente essa interface.
  2. 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

Clippy Octocat

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.