'Una magic string es un input que el programador cree que nunca vendra de una fuente externa y que activa funcionalidad que de otra manera estaria oculta.'
Basicamente el termino se usa para identificar a las cadenas existentes directamente en nuestro codigo (hard-codeadas). Testas cadenas sona veces necesarias en una aplicacion o al menos a veces no pueden ser evitadas en algunas situaciones (como cuando tenemos que lidiar con codigo antiguo).
El principal problema con las Cadenas Magicas es que son propensas al error, especialmente si son usadas en ams de un lugar de la aplicacion, porque podriamos aquivocarnos al teclarla y no tendriamos ningun error de compilacion o advertencia.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Para verificar algun seting | |
if (tipoDeUsuario == "Admin") | |
{ | |
EsAdmin = true; | |
} | |
//O para definir un proceso dentro de una funcion | |
if (proceso == "ExtensionCredito") | |
{ | |
calcularInteres = true; | |
} | |
//Eso seria usado asi... | |
this.EjecutarCalculoX("ExtensionCredito", clienteId: 567) |
Hay un par de maneras de resolver esto.
La primera es el uso de un 'enum':
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//Ejemplo A | |
public enum TipoUsuario | |
{ | |
Admin, | |
User | |
} | |
//Para verificar un seting | |
if (tipoUsuario == TipoUsuario.Admin) | |
{ | |
EsAdmin = true; | |
} | |
//Ejemplo B | |
public enum Operacion | |
{ | |
ExtensionCredito, | |
Pago, | |
VentaActivos | |
} | |
//O para definir un proceso dentro de una funcion | |
if (proceso == Enum.GetName(typeof(Operacion), Operacion.ExtensionCredito)) | |
{ | |
calcularInteres = true; | |
} | |
//Eso se podria llamar asi... | |
this.EjecutarCalculoX(Enum.GetName(typeof(Operacion), Operacion.ExtensionCredito), clienteId: 567) |
Sin embargo esta solucion no es suficiente si nuestros 'magic strings' tienen mas de una palabra o un caracter de espacio. Para esas situaciones la manera mas comun de resolverlas es definirlas como constantes string en una clase estatica creada especialmente para almacenarlas :
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
public static class Operacion | |
{ | |
public const string ExtensionCredito = "Extension de Credito" ; | |
public const string Pago = "Pago Hecho" ; | |
public const string VentaActivo = "Venta de Activos" ; | |
} | |
//Asi podemos usar la funcionalidad de esta manera: | |
if (proceso == Operacion.ExtensionCredito) | |
{ | |
calcularInteres = true; | |
} | |
this.EjecutarCalculoX(Operacion.ExtensionCredito, clientId: 567) |
De esa manera tenemos todas nuestras 'magic strings' en un lugar donde las podemos actualizar, si es necesario, sin romper nuestro codigo.
Y eso, amigo mio, es todo!
No comments:
Post a Comment