Hola a todos, espero que disfruten el siguiente mini tutorial 🦖
Aveces tenemos una configuración de un sistema, ya sea por base de datos o algún archivo de configuración.
Dependiendo de esta configuración el comportamiento del programa en su implementación puede cambiar mucho y como nosotros somos programadores elegantes 😎 no queremos hacer un switch case de implementación de interfaces, llamamos el objeto de nuestra configuración y voila 🤗.
Un ejemplo mundo real que estoy aplicando esto es para un bot de trading donde la configuración apunta a realizar operaciones en diferentes exchanges, cada exchange maneja diferentes apis, reglas de negocio e implementaciones, por lo cual esta técnica es sumamente útil.
Voy a plantear la siguiente situación hipotética, viajar, podemos viajar de muchas formas!
Desde un archivo json en nuestro ejemplo podemos, configurar el medio de transporte (avión, pie, carro y trén).
Para poner un poco de orden al caos de llamar objetos sin conexión, implementamos una interfaz la cual deben cumplir todos los objetos
Para facilitar la lectura de un objeto json, usaremos la librería newton soft.
El proyecto en su estructura quedaría así
Archivo de configuración Config.json
{
"Medio": "Pie"
}
interface Iviajar
namespace LlamadoDinamico
{
//Marco de referencia que deben cumplir los diferentes medios de viaje
public interface Iviajar
{
bool ComienzoViaje(string destino);
}
}
Programa principal
/***
* Ejemplo de como invocar una clase dinámicamente por medio de una configuración almacenada en un archivo
* de configuración
***/
using LlamadoDinamico;
using Newtonsoft.Json.Linq;
using System.Collections.Generic;
string configPath = Directory.GetCurrentDirectory() + @"\Config.json";
if (File.Exists(configPath))
{
//Obtención en bruto del archivo a texto
string textConfiguration = File.ReadAllText(configPath);
//de string a Jobject
dynamic data = JObject.Parse((string)textConfiguration);
string medio = data["Medio"];
//se incluye la ruta del namespace completo más la clase
string strclase = "LlamadoDinamico.FormasdeViaje." + medio;
Iviajar viajar = (Iviajar)System.Reflection.Assembly.GetExecutingAssembly().CreateInstance(strclase);
bool resultado = viajar.ComienzoViaje("FarFaraway!");
Console.ReadLine();
}
Implementación de una de las forma de viaje
Pie.cs
namespace LlamadoDinamico.FormasdeViaje
{
public class Pie : Iviajar
{
public bool ComienzoViaje(string destino)
{
bool respuesta = false;
if (destino == "FarFaraway!")
{
Console.WriteLine("voya pie y está muy lejos, usa otro medio de transporte");
}
else
{
Console.WriteLine("Andando ando!");
respuesta = true;
}
return respuesta;
}
}
}
Baja el ejemplo completo acá
https://github.com/sergiotechx/LlamadoDinamico
Espero que te haya sido de utilidad 😁 y a seguir con toda la energía positiva en tu proyecto, que eso no se hace sólo 💪
Top comments (0)