DEV Community

João Pedro Gonçalves
João Pedro Gonçalves

Posted on

Estratégias de Ativação de Features Flags no GitLab - exemplo prático em Flutter

Para que usamos Feature Flags

Podemos pensar em Feature Flag(FF) como a sinalização para uma Recurso de um sistema. Essa sinalização vai dizer se essa recurso está acessível ou não.

Tecnologias envolvidas

Apesar do caráter booleano das FFs, surgiram implementações e especificações que associam estratégias ao seu uso.

O Unleash contém a especificação que o package dart Unleash Client SDK, importado pela nossa aplicação, usa para interagir com a alternância de recursos(feature toggles).

O repositório do nosso app está no GitLab, este por sua vez usa o já citado Unleash para disponibilizar aos desenvolvedores as Feature Flags Gitlab.

Rodando a Aplicação exemplo

Neste pr do unleash multi tenant POC temos o estado de código suficiente para trabalhar disponibilidade de recursos usando userIDs.

git clone https://github.com/GeoSales-Evolution/unleash-multi-tenant-flutter-poc.git
Enter fullscreen mode Exit fullscreen mode

Para usar o projeto com sucesso é preciso atribuir corretamente as variáveis de ambiente no arquivo .env como descrito neste post.

Em seguida é preciso rodar a aplicação.

flutter run 
Enter fullscreen mode Exit fullscreen mode

E finalmente chegar a tela que testa as Feature Flags.

Tela inicial POC unleash multitenant

flag tela poc

Criando Feature Flag

Usaremos estratégias baseadas em userIDs. Como estamos trabalhando como GitLab é preciso ter acesso à um projeto nessa plataforma, e então acessar a tela de features flags.

Navegação Menu GitLab

Então Vamos criar uma Feature Flag clicando no botão New feature flag.

Cabeçalho Feature Flags Gitlab

Estratégias

Vamos abordar 3 estratégias com exemplos

1/3 All users

Essa é a estratégia mais simples, pois não filtra(restringe) nenhum usuário.

All users

Mesmo passando um usuário qualquer via Context, ou até mesmo sem passar usuário, receberemos positivo caso a flag esteja ativa.

Feature Flag ativa

Esse trecho está no PR 18 Unleash multi tenant POC, sendo responsável por por printar a disponibilidade do recurso no console.

print('Is feature accessible ? == ${unl.isEnabled(flagText, localContext: Context(userId: "usuarioqualquer"))}');
Enter fullscreen mode Exit fullscreen mode

consulta flag

2/3 Usando userIDs diretamente

Podemos digitar as strings correspondentes aos usuários e associas essa estratégia à Feature Flag

userID capivara

Como não estamos passando o userID capivara no código Dart o resultado vai ser negativo.

False

Assim que passarmos o userID pelo contexto, temos resultado positivo.

print('Is feature accessible ? == ${unl.isEnabled(flagText, localContext: Context(userId: "capivara"))}');
Enter fullscreen mode Exit fullscreen mode

capivara true

OBS: hot reload pode não atualizar o construtor de Context causando erros nos seus testes.

3/3 Usando Listas de Usuários

Novamente no cabeçalho de Feature Flags, vamos escolher a opção "View Users List".

FF

Depois "New user list"

New user list

Depois de criada a lista vamos adicionar usuários em "Add Users"

Add Users

users

lista pronta

Lista pronta e contendo usuários podemos usá-la como estratégia para nossa FF.

Depois deselecionar a opção "edit", entramos na tela de edição de FFs, muda-se a estratégia e escolhemos a lista.

lista

Caso o userID passado no contexto esteja contido na lista teremos um resultado positivo.

print('Is feature accessible ? == ${unl.isEnabled(flagText, localContext: Context(userId: "sabia"))}');
Enter fullscreen mode Exit fullscreen mode

sabia true

Demais estratégias

Existem outras estratégias usadas com Feature Flags, além da opção de adicionar várias estratégias na tela de edição - basta clicar em "Add strategy".

add strategy

Conclusão

Usando GitLab, Flutter e Unleash vimos que as regras são todas definidas no nosso repositório GitLab, enquanto que passamos informações do usuário via Context no lado Dart para avaliar a disponibilidade do recurso.

Valeu !!

Top comments (0)