Archivo de la etiqueta: Clean Code

Feature Switch o como acabar de golpe con los merge monstruosos y errores críticos

Probablemente cuando estudiaste y te enseñaron las virtudes de los sistemas de control de versiones te explicaron como usar branches para separar las nuevas funcionalidades del resto del programa para no tener cosas a medias en el trunk.

A la hora de la verdad esa metodología sólo funciona con pequeños proyectos y al entrar en el mercado laboral chocamos con la realidad que es que la mayoría de proyectos de software son enormes y hay que dedicar muchísimo tiempo a hacer merge de las nuevas funcionalidades, y si a eso le sumas las metodologías Agile en las que el tiempo es limitado tenemos la tormenta perfecta del desarrollo de software.

Pero por suerte alguien pensó en la solución y inventó los Feature Switch que como su nombre indica vienen a ser interruptores lógicos con los que podemos activar y desactivar funcionalidades a nuestro gusto de manera que podemos trabajar sin crear branches adicionales, de forma que nos ahorramos merges y además también sirven para volver a desactivar una funcionalidad rápidamente en caso que detectemos un error crítico en producción.

La forma de activar y desactivar los Feature Switch está en manos de la creatividad y necesidades de cada proyecto. En algunas aplicaciones será un archivo de texto indicando el estado de cada funcionalidad, en otros según la fecha o región donde se ejecuta la aplicación, otras veces será mediante un pago, etc. Tiene un potencial muy grande de usos y utilidades.

¿Cómo implementar un Feature Switch?

En Google encontrarás librerías y ejemplos de Feature Switch para aburrir y por eso no voy a entrar en detalle. Sólo comentar mi preferida para C# que es la librería FeatureToggle de Jason Roberts y que el me gusta por lo siguiente:

using System;
using FeatureToggle;

namespace ConsoleApp1
{

public class Printing : SimpleFeatureToggle { }
public class Saving : EnabledOnOrAfterDateFeatureToggle { }
public class Tweeting : EnabledOnOrAfterAssemblyVersionWhereToggleIsDefinedToggle { }

class Program
{
static void Main(string[] args)
{
var p = new Printing();
var s = new Saving();
var t = new Tweeting();

Console.WriteLine($"Printing is {(p.FeatureEnabled ? "on" : "off")}");
Console.WriteLine($"Saving is {(s.FeatureEnabled ? "on" : "off")}");
Console.WriteLine($"Tweeting is {(t.FeatureEnabled ? "on" : "off")}");

Console.ReadLine();
}
}
}

(Copiado de dontcodetired.com/blog/post/FeatureToggle-v4-RC1-with-NET-Core-Support)

La sencillez y de elegancia de uso de la librería de Jason Roberts es sublime. Con unas pocas líneas tenemos configurado todos los switches y los nombre son muy claros de manera que no hace falta estudiar el código de las clases de este Feature Switch para darse cuenta que por ejemplo EnabledOnOrAfterDateFeatureToggle activará la funcionalidad llegada una fecha indicada. Además es una librería actualizada muy a menudo. Por esas razones la recomiendo.

El Feature Switch es un concepto simple, fácil de implementar, y sirve tanto para proyectos grandes como para pequeños. Usadlo siempre que podáis porque os ahorrará muchos dolores de cabeza.