O que são Feature Flags ou Feature Toggle? Quando usar? .NET tem suporte ?

Marcio Nizzola
4 min readFeb 14, 2023

--

Utilizando a biblioteca Microsoft.FeatureManagement para implementar Feature Toggle

Sempre que pensamos num software evoluindo, temos a necessidade de convivência do novo x velho, onde criamos novas features, novas bibliotecas, e a convivência entre elas acaba tornando-se algo necessário até que testes e validações ocorram de forma a certificar que esta parte nova do código é confiável.

Uma das abordagens de migração de legados que eu utilizo e sempre preciso de Feature-Toggle em suas etapas de teste é o Padrão de Estrangulamento (Strangle-Pattern).

Estrangulamento de Legado

Onde migramos pequenas partes de uma aplicação legada para novos serviços, e muitas vezes precisamos conectar e desconectá-las caso estejamos testando ou descobrimos algum bug.

Já fiz muitas implementações, quer seja utilizando variáveis no config da aplicação, quer seja via código, mas selecionar que parte do código executar pode ser mais simples do que parece, e .NET nos dá suporte à isso !

A biblioteca Microsoft.FeatureManagement permite que façamos a implementação de Feature Flags de uma forma simples !

Então para testar o conceito, vamos criar uma Web Api com .NET 6, nesta Api teremos duas versões de um serviço, as quais ativaremos via Feature Flags.

Na inicialização da aplicação, vemos na linha 11, a inicialização de Feature-Toggles da Microsoft.

Na linha 12, instanciamos o serviço para ser utilizado na API.

Já no bloco que se inicia na linha 24, vemos a declaração do endpoint da Minimal Api e o consumo da classe “MyService” que veremos abaixo:

using Microsoft.FeatureManagement;

namespace FeatureFlagsApi.Services
{
public class MyService
{
private readonly IFeatureManager _featureManager;
public MyService(IFeatureManagerSnapshot featureManager)
{
_featureManager = featureManager;
}
public async Task<string> Process()
{
// Verifica se o recurso "NewMethod" está habilitado
if (await _featureManager.IsEnabledAsync("NewMethod"))
{
return NewMethod();
}
else
{
return LegacyMethod();
}
}

public string NewMethod()
{
return "Novo Método";
}
public string LegacyMethod()
{
return "Método legado";
}
}
}

vemos que é utilizada a verificação de feature flags através do comando “IsEnabledAsync” e com a palavra chave que foi configurada no appsettings.json, veja no código abaixo:

{
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*",
"FeatureManagement": {
"NewMethod": false
}
}

Vejam que foi criada a Chave “FeatureManagement” e “NewMethod” está setado como “false”, a setar esta aplicação como “true” ela irá utilizar a outra função.

Com a chave em false:

Com a chave em true:

Pronto ! você tem um feature-toggle instalado !

Um ponto a ser destacado é que muitas vezes se estivermos utilizando software legado como .NET Framework 4.x pode ser que a implementação desta biblioteca não funcione da mesma forma.

Eu pessoalmente, realizei configurações similares em aplicações .NET Framework utilizando apenas uma variável no config e a leitura da mesma obtendo o mesmo resultado.

Então vamos lá, qual a vantagem de utilizar?

A vantagem de usar o pacote Microsoft.FeatureManagement em vez de simplesmente adicionar uma nova chave no appsettings.json e ler através do padrão IOptions é que o Microsoft.FeatureManagement fornece uma abordagem mais sofisticada e flexível para gerenciar feature flags em seu aplicativo. Algumas das vantagens incluem:

  • Abordagem baseada em condições: O Microsoft.FeatureManagement permite que você configure regras para controlar o acesso aos recursos, com base em condições como o perfil do usuário, a localização ou a data/hora. Isso permite que você tenha um controle mais granular sobre quem pode acessar quais recursos.
  • Integração com Azure: O Microsoft.FeatureManagement é parte do ecossistema de plataformas Microsoft, e é fácil de integrar com outros serviços da Microsoft, como o Azure. Isso permite que você use uma única plataforma para gerenciar configurações de recursos para todos os seus aplicativos.

Exemplo de código onde é utilizado o Azure Feature Flags para gerenciamento.

config.AddAzureAppConfiguration(options =>
options.Connect(settings["ConnectionStrings:AppConfig"]).UseFeatureFlags(featureFlagOptions => {
featureFlagOptions.CacheExpirationInterval = TimeSpan.FromMinutes(5);
}));
});
  • Monitoramento de recursos: O Microsoft.FeatureManagement fornece recursos de monitoramento para ajudá-lo a entender como seus recursos estão sendo usados e identificar possíveis problemas.

Veja o exemplo da implementação no meu repositório: https://github.com/NIZZOLA/FeatureFlagsApiDotNet6

Gostou do artigo? clique no ícone👏e me siga para ver as próximas publicações !!

Referências:

Tutorial for using feature flags in a .NET Core app | Microsoft Docs

Quickstart for adding feature flags to ASP.NET Core | Microsoft Docs

--

--

Marcio Nizzola
Marcio Nizzola

Written by Marcio Nizzola

Microsoft MVP | Software Architect na CI&T | Prof. da Etec Itu | Membro Fundador da Comunidade Itu Developers.

Responses (2)