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
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
E finalmente chegar a tela que testa as Feature Flags
.
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.
Então Vamos criar uma Feature Flag
clicando no botão New feature flag
.
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.
Mesmo passando um usuário qualquer via Context
, ou até mesmo sem passar usuário, receberemos positivo caso a flag esteja 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"))}');
2/3 Usando userIDs diretamente
Podemos digitar as strings correspondentes aos usuários e associas essa estratégia à Feature Flag
Como não estamos passando o userID capivara no código Dart o resultado vai ser negativo.
Assim que passarmos o userID pelo contexto, temos resultado positivo.
print('Is feature accessible ? == ${unl.isEnabled(flagText, localContext: Context(userId: "capivara"))}');
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".
Depois "New user list"
Depois de criada a lista vamos adicionar usuários em "Add Users"
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.
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"))}');
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".
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)