Uma estrutura leve para alternância de recursos para permitir o desenvolvimento baseado em tronco.
Switcheroo busca simplicidade, com uma sintaxe limpa e um conjunto mínimo de recursos, sem comprometer a extensibilidade e a testabilidade.
Switcheroo pode ser instalado via Nuget.
> Switcheroo de pacote de instalação
Switcheroo é licenciado sob a licença do MIT.
Instalação
Os pacotes Nuget podem ser encontrados aqui.
Adicionar configuração
<configuração> <seções de configuração> <section name="features" type="Switcheroo.Configuration.FeatureToggleConfiguration, Switcheroo"/> </configSections> <recursos> <alterna> <add name="Log.InColor" habilitado="true"/> </toggles> </características> </configuração>
Inicializando a biblioteca
Features.Initialize(x => x.FromApplicationConfig());
Verificando o status do recurso
if (Features.IsEnabled("Log.InColor")){// Implementar recurso}
Booleano (verdadeiro/falso)
O recurso alterna com base em um valor binário estático - ativado ou desativado.
recursos.Add(new BooleanToggle("Recurso1", verdadeiro));
<recursos> <alterna> <add name="BooleanToggle.Enabled" habilitado="true"/> <add name="BooleanToggle.Disabled" habilitado="false"/> </toggles> </características>
Período (verdadeiro/falso, dentro do intervalo de datas)
As alternâncias do recurso de intervalo de datas são avaliadas tanto no valor binário habilitado quanto na data atual.
features.Add(new DateRangeToggle("Feature2", true, DateTime.Now.AddDays(5), null));
<recursos> <alterna> <add name="Date.Enabled.InRange" enabled="true" from="1 de janeiro de 2010" até="31 de dezembro de 2050"/> <add name="Date.Enabled.Expired" enabled="true" até="31 de dezembro de 2010"/> <add name="Date.Enabled.Future" enabled="true" from="1 de janeiro de 2050"/> <add name="Date.Disabled" enabled="false"/> </toggles> </características>
As datas de e até podem ser qualquer formato de data válido analisável por DateTime.Parse .
Recursos estabelecidos
Marcar uma alternância de recurso como estabelecida faz com que a alternância de recurso lance uma exceção FeatureEstablishedException para garantir que ela não seja mais consultada.
features.Add(newestablishedFeatureToggle("establishedFeature"));
<recursos> <alterna> <add name="EstablishedFeature" estabelecido="true"/> </toggles> </características>
Dependências
Os recursos podem depender de outros recursos. Por exemplo, às vezes é conveniente ter um recurso "principal" e, em seguida, sub-recursos que dependem dele. As dependências podem ser especificadas na configuração como uma lista delimitada por vírgulas.
var mainFeature = new BooleanToggle("mainFeature", true);var subFeature1 = new BooleanToggle("subFeature1", true);var subFeature2 = new BooleanToggle("subFeature2", true);var dependency1 = new DependencyToggle(subFeature1, mainFeature); var dependência2 = new DependencyToggle(subFeature2, mainFeature);features.Add(dependência1);features.Add(dependência2);
<recursos> <alterna> <add name="SubFeature1" enabled="true" dependencies="MainFeature"/> <add name="SubFeature2" enabled="true" dependencies="MainFeature"/> <add name="MainFeature" enabled="true" /> </toggles> </características>
Inicialização amigável ao código
Recursos IFeatureConfiguration = new FeatureConfiguration{new BooleanToggle("Feature1", true),new DateRangeToggle("Feature2",true,DateTime.Now.AddDays(-2),DateTime.Now.AddDays(3))};
Compatível com IOC por meio de instâncias IFeatureConfiguration ou da instância de suporte estática Feature.Instance
For<IFeatureConfiguration>().Use(Features.Instance);
Diagnóstico de alternância de recursos: IFeatureConfiguration.WhatDoIHave
Console.WriteLine(features.WhatDoIHave());
Name Feature1
IsEnabled True
Name Feature2
IsEnabled True
From 11/16/2012 3:32:23 PM
Until 11/21/2012 3:32:23 PM
Carregando de recursos de configuração personalizados: construa sobre IConfigurationReader
0.3.4753.37554
MutableToggle removido
Adicionada a capacidade de "congelar" uma configuração de alternância.
A validação do estado de alternância (incluindo ciclos em dependências) agora ocorre além do contêiner de configuração de recursos.
0.3.4749.36197
Mecanismo de detecção de ciclos de dependência. Este recurso só está ativo ao configurar dependências via configuração da aplicação.
Corrigido o erro em que um DependencyToggle dependendo de outro DependencyToggle poderia fazer com que alternâncias duplicadas fossem adicionadas ao conjunto de recursos.
v0.3.4748.37146
Mecanismo de configuração para DependencyToggle
v0.2.4730.37739
Adicionado DependencyToggle.
Alterado de Dicionário para ConcurrentDictionary.
v0.2.4705.37094
Adicionados recursos estabelecidos.
v0.1.4705.28808
Adicionada alternância de DateRange.
Bastante refatoração interna.
v0.1.4704.41742
Versão inicial: alternâncias simples.