class Reuse {
private static bool DEBUG = true;
Evitar código fuente duplicado en C#.
A continuación se describen las circunstancias bajo las cuales la siguiente solución tiene sentido:
Se está desarrollando una aplicación en C#.
Se desea evitar código fuente duplicado en la aplicación.[1]
Es común encontrar código duplicado en diferentes tipos de aplicaciones, esta duplicación representa trabajo, riesgo y complejidad adicional, por lo que evitar duplicar código fuente es importante para mantener la seguridad de la aplicación.[2]
Declaramos la nueva clase y una constante para depurar los mensajes:
class Reuse {
private static bool DEBUG = true;
El método main llama a dos métodos que generan errores, estos errores son imprimidos en pantalla si la constante de depuración tiene el valor verdadero:
static void Main(string[] args) {
divisionPorCero();
integerParseInt();
}
El primer método arroja un error de división por cero, vemos que los mensajes de error son imprimidos a través de la salida estándar, con la causa y el mensaje de excepción:
public static void divisionPorCero() {
try {
int x = 4;
int y = x;
Console.WriteLine("Resultado: "+(22/(x-y)));
} catch (Exception e) {
if (DEBUG) {
Console.Error.WriteLine("Error");
Console.Error.WriteLine("Causa "+e.Source+" "+e.Message);
}
}
}
Igualmente se define un segundo método que arroja la excepción la clase Integer. En el cual termina el programa:
public static void integerParseInt() {
try {
Console.WriteLine("Resultado: " + int.Parse("Fluid Attacks"));
}
catch (Exception e) {
if (DEBUG) {
Console.Error.WriteLine("Error");
Console.Error.WriteLine("Causa " + e.Source + " " + e.Message);
}
}
}
El error consiste en duplicar el código, si las clases siguen creciendo y se continua la metodología de duplicar el código, cambios futuros en la aplicación como eliminar el mensaje causa, filtrar ciertas palabras de las excepciones, entre otros, pueden llegar a causar una fuga de información.[3] Si los mensajes de error son manejados de forma centralizada, el cambio se hace únicamente en un lugar, por lo que a un crecimiento futuro no representaría riesgo de fuga de información. Para evitar duplicar código se debe abstraer las llamadas en común a un nuevo método. Declaramos la nueva clase y una constante para depurar los mensajes:
class Reuse {
private static bool DEBUG = true;
El método main llama a dos métodos que generan errores, estos errores son imprimidos en pantalla si la constante de depuración tiene el valor verdadero:
static void Main(string[] args) {
divisionPorCero();
integerParseInt();
}
El método showError se encargará de ahora en adelante de manejar los mensajes de error. Un cambio en este método se ve reflejado en todas sus demás llamadas:
public static void showError(Exception e) {
if (DEBUG){
Console.Error.WriteLine("Error");
Console.Error.WriteLine("Causa " + e.Source + " " + e.Message);
}
}
Ahora los dos métodos llaman al método showError:
public static void divisionPorCero() {
try {
int x = 4;
int y = x;
Console.WriteLine("Resultado: "+(22/(x-y)));
} catch (Exception e) {
showError(e);
}
}
public static void integerParseInt() {
try {
Console.WriteLine("Resultado: " + int.Parse("Fluid Attacks"));
}
catch (Exception e) {
showError(e);
}
}
Puedes descargar el código fuente pulsando en el siguiente enlace:
contiene todas las instrucciones C# del programa.
Copyright © 2021 Fluid Attacks, We hack your software. All rights reserved.