Utilizando Feature Toggle em seu App Xamarin

Neste artigo eu e o Microsoft MVP Albert Tanure, iremos explicar o que é o Feature Toggle e como podemos de uma maneira simples implementa-lo em nossas aplicações mobile feitas com Xamarin.

 

Introdução

O que mais me atrai no desenvolvimento móvel é a capacidade de entrega de valor rapidamente. Podemos desenvolver um aplicativo que gerencia os livros que estamos lendo, por exemplo, e utilizá-lo no smartphone imediatamente. Esta agilidade na entrega na entrega de valor pode ser um fator determinante para o sucesso das soluções em um mercado tão concorrido. Neste contexto falaremos de Feature Toggles e como esta estratégia nos auxilia na ação imediata para atendimento de demandas constantes de nossos parceiros.

Martin Fowler descreve, basicamente, a estratégia de Feature Toggle(ou feature flags) como uma técnica poderosa para alterar o comportamento de uma aplicação sem a necessidade de modificar o seu código (https://martinfowler.com/articles/feature-toggles.html).

De forma simples, um toggle é, basicamente, um liga/desliga. Podemos entender como um ponto de decisão no código fonte da aplicação. Desta forma, se um toggle estiver ligado, a aplicação terá um comportamento A e, em caso de desligado, um comportamento B.

anatomy

Não há a necessidade de alteração de código já que existem diversas estratégias para se trabalhar com Toggles. A mais comum é a utilização de um Toggle Service ou Management.

Screen Shot 2019-07-30 at 10.06.52

Sempre que necessário avaliar um toggle será necessário consultar um toggle service. Isso quer dizer que haverá uma chamada REST, por exemplo, para o serviço que gerencia o estado do toggle. Calma, existem diversas técnicas para performar tais requisições, uma delas é o uso de cache.

O toggle service possui uma interface de gerenciamento de toggles, permitindo alterar o estado do mesmo e a aplicação ter uma resposta imediata sobre qual será o seu comportamento nos pontos de decisão. Esta técnica é muito interessante e permite ser utilizada para testes A/B, estratégias de migração, validação de novas features, entre várias necessidades.

Claro, nem tudo são flores. A utilização dos pontos de decisão de toggles, em nosso código, demanda um melhor gerenciamento dos débitos técnicos, já que dependendo do “tempo de vida” do seu toggle, em algum momento o ponto de decisão(if) deverá ser removido. Mas isso é história para um outro artigo.

Xamarin e Feature Toggle

Como mencionado anteriormente, para a utilização da estratégia de feature toggles é necessário um Toggle Service ou Manager. Isso permite mudar o comportamento da aplicação Online. Além disso, por ser uma chamada REST podemos facilmente portar esta técnica para uso em aplicações móveis.

Para exemplificar como podemos utilizar Feature Toggle de uma maneira bem simples em aplicações Xamarin, iremos utilizar o ConfigCat que é um Toggle Manager e criar uma aplicação do tipo Xamarin.Forms.

ConfigCat

O primeiro passo para utilizar este Toggle Manager é acessar o site https://configcat.com/ e criar uma conta. 

Screen Shot 2019-07-19 at 16.51.24.png

 

Vale ressaltar que o ConfigCat é uma ferramenta paga, mas para seguir este exemplo você pode utilizar a camada free, como podemos observar na imagem a seguir.

Screen Shot 2019-07-19 at 16.50.53.png

 

Após a criação da conta, você será redirecionado para uma tela parecida com a da imagem a seguir, onde por padrão já existe um Toggle chamado isAwesomeFeatureEnabled criado. Para este exemplo, iremos utilizar este próprio toggle. 

Screen Shot 2019-07-19 at 17.02.22

 

Clique em “Connect your applications” e copie a API key, iremos utiliza-la nos passos a seguir.

Screen Shot 2019-07-19 at 17.07.21

Adicionando o Nuget Package

Instale o plugin em seu projeto compartilhado, como demonstrado na imagem a seguir.

Screen Shot 2019-07-19 at 17.18.36

XAML

Para este exemplo, em nossa tela teremos apenas um Button para realizar a verificação do nosso Toggle e uma Label para demonstrar o estado dele. 

C#

No método que será chamado ao clicar no botão,  instancie um ConfigCatClient passando como parâmetro a API KEY. Em seguida, realize uma chamada ao método GetValue do nosso client, passando como parâmetro o nome do nosso toggle e o valor default, que neste caso é false.

Se o toggle estiver ativado o retorno desta chamada será true, caso contrário será false.

Cache

Por padrão o SDK do ConfigCat já trabalha com uma espécie cache, sendo assim não é toda vez que você realiza uma chamada ao método GetValue que ele irá realizar uma requisição REST. Vamos supor que a sua lógica de negócio demande que essa chamada REST seja feita em menor tempo, ou maior do que o default de 60 segundos.

Para isso, podemos nós mesmos configurar o tempo desejado para que o SDK do ConfigCat realize essa verificação. O SDK do ConfigCat nos disponibiliza 3 maneiras diferentes para fazer isso, sendo elas: Auto polling (padrão), Manual Pooling e Lazy loading.

 

Auto pooling

Instancie um objeto do tipo AutoPollConfiguration, passando a API KEY na propriedade ApiKey e o tempo em segundos para a realização da chamada REST ao Toggle Manager na propriedade PollIntervalSeconds.

Em seguida, instancie o ConfigCatClient, agora passando como parâmetro o objeto ClientConfiguration.

 

Manual Polling

Instancie um objeto do tipo ManualPollConfiguration, passando a API KEY na propriedade ApiKey.

Em seguida, instancie o ConfigCatClient, passando como parâmetro o objeto ClientConfiguration.

Diferente do exemplo anterior, neste caso a chamada REST ao Toggle Manager, será realizada sempre que você chamar o método ForceRefresh, como demonstrado a seguir. 

Lazy loading

Esta forma é muito parecida com o Auto pooling, também iremos setar um tempo em segundos para realizar a verificação. A diferença que aqui esse tempo é utilizado para uma estratégia de cache, ou seja, quando realizarmos a chamada ao método GetValue, o SDK verifica se o cache está vencido, e se sim, ele realiza uma nova chamada REST ao Toggle Manager, caso contrário ele simplesmente retorna o último valor obtido. 

Instancie um objeto do tipo LazyLoadConfiguration, passando a API KEY na propriedade ApiKey e o tempo em segundos na propriedade CacheTimeToLiveSeconds.

Em seguida, instancie o ConfigCatClient, agora passando como parâmetro o objeto ClientConfiguration.

 

Resultado

ezgif.com-gif-maker

 

Esse e todos os exemplos deste blog encontram-se disponíveis no GitHub.

icongithub

 

Este artigo teve a participação do Albert Tanure, saiba mais sobre ele e seus projetos em:

Instagram: @code_fc

Linkedin: Albert Tanure

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair /  Alterar )

Foto do Google

Você está comentando utilizando sua conta Google. Sair /  Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair /  Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair /  Alterar )

Conectando a %s