🚫Singleton
El patrón Singleton es un principio de diseño que restringe la instanciación de una clase a un solo objeto. Es útil cuando se necesita exactamente una instancia para coordinar acciones a lo largo del sistema. Sin embargo, su uso indebido puede considerarse un Code Smell, especialmente si lleva a un acoplamiento innecesario entre componentes o dificulta las pruebas unitarias.
public class Database
{
private static Database instance;
private Database() { }
public static Database Instance
{
get
{
if (instance == null)
{
instance = new Database();
}
return instance;
}
}
public void Query(string sql)
{
// Imagine aquí la implementación de ejecutar una consulta SQL
Console.WriteLine($"Ejecutando consulta: {sql}");
}
}En este ejemplo, la clase Database garantiza que solo pueda existir una instancia de sí misma. El método Query simula la ejecución de una consulta SQL.
¿Por qué el Singleton puede ser un Code Smell? 🤔
Contexto Global: Al tener una única instancia accesible globalmente, el Singleton vive en el contexto global, lo que puede llevar a dependencias ocultas entre clases y dificultar el seguimiento de dónde y cómo se utiliza.
Modificación no controlada: Al ser accesible globalmente, cualquier parte del código puede modificar el estado del Singleton, lo que puede llevar a resultados inesperados o difíciles de depurar.
Dificultad para probar: Las pruebas unitarias se complican, ya que el estado del Singleton puede ser modificado por pruebas anteriores, llevando a resultados de pruebas no deterministas. Además, mockear o simular el Singleton para pruebas unitarias puede ser complicado.
Inflexibilidad: El uso del Singleton puede hacer más difícil cambiar la implementación o configuración debido a su naturaleza global y única.
Última actualización