Un cadre léger pour le basculement de fonctionnalités afin de permettre le développement basé sur le tronc.
Switcheroo vise la simplicité, avec une syntaxe claire et un ensemble minimal de fonctionnalités sans compromettre l'extensibilité et la testabilité.
Switcheroo peut être installé via Nuget.
> Switcheroo du package d'installation
Switcheroo est sous licence MIT.
Installation
Les packages Nuget peuvent être trouvés ici.
Ajouter une configuration
<configuration> <configSections> <section name="features" type="Switcheroo.Configuration.FeatureToggleConfiguration, Switcheroo"/> </configSections> <fonctionnalités> <bascule> <add name="Log.InColor" activé="true"/> </toggles> </caractéristiques> </configuration>
Initialisation de la bibliothèque
Features.Initialize(x => x.FromApplicationConfig());
Vérification de l'état des fonctionnalités
if (Features.IsEnabled("Log.InColor")){// Implémenter la fonctionnalité}
Booléen (vrai/faux)
La fonctionnalité bascule en fonction d'une valeur binaire statique - activée ou désactivée.
Features.Add(new BooleanToggle("Feature1", true));
<fonctionnalités> <bascule> <add name="BooleanToggle.Enabled" activé="true"/> <add name="BooleanToggle.Disabled" activé="false"/> </toggles> </caractéristiques>
Plage de dates (vrai/faux, dans la plage de dates)
Les bascules de fonctionnalité de plage de dates sont évaluées à la fois sur la valeur binaire activée et sur la date actuelle.
Features.Add(new DateRangeToggle("Feature2", true, DateTime.Now.AddDays(5), null));
<fonctionnalités> <bascule> <add name="Date.Enabled.InRange" activé="true" du="1er janvier 2010" au="31 décembre 2050"/> <add name="Date.Enabled.Expired" activé="true" jusqu'au="31 décembre 2010"/> <add name="Date.Enabled.Future" activé="true" from="1 janvier 2050"/> <add name="Date.Disabled" activé="false"/> </toggles> </caractéristiques>
Les dates de et jusqu'à peuvent être n'importe quel format de date valide analysable par DateTime.Parse .
Fonctionnalités établies
En marquant une bascule de fonctionnalité comme établie, la bascule de fonctionnalité lève une exception FeatureEstablishedException pour s'assurer qu'elle n'est plus interrogée.
Features.Add(new establishmentFeatureToggle("establishedFeature"));
<fonctionnalités> <bascule> <add name="EstablishFeature" establishment="true"/> </toggles> </caractéristiques>
Dépendances
Les fonctionnalités peuvent dépendre d’autres fonctionnalités. Par exemple, il est parfois pratique d'avoir une fonctionnalité « principale », puis des sous-fonctionnalités qui en dépendent. Les dépendances peuvent être spécifiées dans la configuration sous forme de liste délimitée par des virgules.
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 dependency2 = nouveau DependencyToggle(subFeature2, mainFeature);features.Add(dependency1);features.Add(dependency2);
<fonctionnalités> <bascule> <add name="SubFeature1" activé="true" dependencies="MainFeature"/> <add name="SubFeature2" activé="true" dependencies="MainFeature"/> <add name="MainFeature" activé="true" /> </toggles> </caractéristiques>
Initialisation respectueuse du code
Fonctionnalités IFeatureConfiguration = new FeatureConfiguration{new BooleanToggle("Feature1", true),new DateRangeToggle("Feature2",true,DateTime.Now.AddDays(-2),DateTime.Now.AddDays(3))} ;
Compatible avec IOC via les instances IFeatureConfiguration ou l'instance de support statique Feature.Instance
Pour<IFeatureConfiguration>().Use(Features.Instance);
Diagnostic de basculement de fonctionnalité : 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
Chargement à partir de ressources de configuration personnalisées : construit sur IConfigurationReader
0.3.4753.37554
MutableToggle supprimé
Ajout de la possibilité de « geler » une configuration à bascule.
La validation de l'état de bascule (y compris les cycles dans les dépendances) s'effectue désormais lors de l'ajout au conteneur de configuration des fonctionnalités.
0.3.4749.36197
Mécanisme de détection des cycles de dépendance. Cette fonctionnalité n'est active que lors de la configuration des dépendances via la configuration de l'application.
Correction d'un bug où un DependencyToggle dépendant d'un autre DependencyToggle pouvait entraîner l'ajout de bascules en double à l'ensemble de fonctionnalités.
v0.3.4748.37146
Mécanisme de configuration pour DependencyToggle
v0.2.4730.37739
Ajout de DependencyToggle.
Passé d'un dictionnaire à un ConcurrentDictionary.
v0.2.4705.37094
Ajout de fonctionnalités établies.
v0.1.4705.28808
Ajout de la bascule DateRange.
Pas mal de refactorisation interne.
v0.1.4704.41742
Version initiale : bascules simples.