No acoplar a los Framework ni a las Librerias
Esta entrada es en base a mi experiencia personal y ademas de varios podcast que he escuchado con este problema de acoplamiento a los frameworks y/o librerias.
Antes de comenzar
Independiente del lenguaje y librería, la verdad es que es muy común acoplarse a las librerías, usar sus forma de hacer las cosas y así facilitarnos un montón de trabajo (en teoría), pero esto con lleva a su vez varios problemas como principalmente si la librería cambia la forma de hacer las cosas y tiene un cambio en una versión mayor implicará hacer cambios en toda nuestra aplicación.
Caso de uso
Tengo un montón de ejemplos, pero encontré dos que son los mas sencillos que se puedan imaginar.
1) Supongamos que tenemos una librería para logear técnicamente, supongamos que estamos usando log4net y necesitamos cambiar a Nlog o Serilog.
2) Supongamos que esta vez tenemos para serializar y deserializar a JSON usamos la librería de NewtonSoft y tenemos que comenzar a usar la de Microsoft.
3) Por ultimo, supongamos que cualquier librería usada, como las mencionadas anteriormente y salio una nueva versión que es incompatible con la versión que estamos usando, esto es mas común de lo que se piensa.
Posibles soluciones.
Últimamente yo me acostumbre a crear niveles de abstracciones para estos tipos de librerías, donde creo una clase que me permita ser incluida en todos los proyectos y que esta sea la encargada de tener la dependencia con mi librería externa.
A continuación un simple ejemplo de la abstracción, es mas bien a nivel de pseudo código donde permitirá cambiar la librería externa a todos los proyectos .net de una solución con muy poco esfuerzo, probándolo obviamente.
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 class Llogger{
private static readonly ILog Log = Logs.GetLogger(); //dependency of Log4net
public static void LogDebug(String message){
Log.LogDebug(message)
}
public static void logInfo(String message){
Log.loginfo(message)
}
}
public class Llogger{ | |
private static readonly ILog Log = Logs.GetLogger(); //dependency of Log4net | |
public static void LogDebug(String message){ | |
Log.LogDebug(message) | |
} | |
public static void logInfo(String message){ | |
Log.loginfo(message) | |
} | |
} |
Comentarios
Publicar un comentario