← Volver a Common.Application

🔗 AliConfigReader

Lector especializado para configuraciones de base de datos

📊 Descripción General

La clase AliConfigReader es un componente especializado que utiliza IniFile para leer configuraciones de base de datos y generar automáticamente cadenas de conexión. Esta clase está diseñada específicamente para manejar configuraciones de SQL Server.

🎯 Propósito de la Clase

  • Configuración de BD: Lectura de parámetros de base de datos
  • Generación de Connection Strings: Creación automática de cadenas de conexión
  • Múltiples Conexiones: Soporte para múltiples bases de datos
  • Formato Estándar: Generación de cadenas en formato SQL Server
  • Simplicidad: API simple para configuración de BD

🔧 Constructor

Constructor Principal

public AliConfigReader(string path)
Crea una instancia del lector de configuración especificando la ruta del archivo INI que contiene las configuraciones de base de datos.

📋 Métodos Disponibles

GetConnectionStrings

public Dictionary<string, string> GetConnectionStrings()
Lee todas las secciones del archivo INI y genera cadenas de conexión para cada una. Retorna un diccionario donde la clave es el nombre de la sección (en mayúsculas) y el valor es la cadena de conexión generada.

📄 Formato de Archivo INI

🏗️ Estructura Requerida

El archivo INI debe contener secciones, donde cada sección representa una base de datos diferente. Cada sección debe contener los siguientes parámetros:

  • UserID: Nombre de usuario para la conexión
  • Password: Contraseña para la conexión
  • DataSource: Servidor o instancia de SQL Server
  • InitialCatalog: Nombre de la base de datos

💡 Ejemplo de Archivo INI

[MasterDB] UserID=restmaster_user Password=secure_password_123 DataSource=localhost InitialCatalog=RestMaster_Master [StoreDB] UserID=restmaster_user Password=secure_password_123 DataSource=localhost InitialCatalog=RestMaster_Store [WorkingDB] UserID=restmaster_user Password=secure_password_123 DataSource=localhost InitialCatalog=RestMaster_Working

💡 Ejemplo de Uso

🔧 Código de Ejemplo

// Crear instancia del lector var configReader = new AliConfigReader("database.ini"); // Obtener todas las cadenas de conexión var connectionStrings = configReader.GetConnectionStrings(); // Acceder a cadenas específicas if (connectionStrings.ContainsKey("MASTERDB")) { string masterConnection = connectionStrings["MASTERDB"]; Console.WriteLine($"Master DB: {masterConnection}"); } if (connectionStrings.ContainsKey("STOREDB")) { string storeConnection = connectionStrings["STOREDB"]; Console.WriteLine($"Store DB: {storeConnection}"); } // Iterar sobre todas las conexiones foreach (var kvp in connectionStrings) { Console.WriteLine($"Database: {kvp.Key}"); Console.WriteLine($"Connection: {kvp.Value}"); Console.WriteLine(); }

📊 Salida Generada

// Ejemplo de cadenas de conexión generadas: MASTERDB: User ID=restmaster_user;Password=secure_password_123;Data Source=localhost;Initial Catalog=RestMaster_Master; STOREDB: User ID=restmaster_user;Password=secure_password_123;Data Source=localhost;Initial Catalog=RestMaster_Store; WORKINGDB: User ID=restmaster_user;Password=secure_password_123;Data Source=localhost;Initial Catalog=RestMaster_Working;

🔍 Características de la Clase

📝 Funcionalidades

  • Lectura Automática: Lee automáticamente todas las secciones del archivo
  • Generación de Cadenas: Crea cadenas de conexión en formato SQL Server
  • Nombres en Mayúsculas: Convierte nombres de sección a mayúsculas
  • Manejo de Errores: Manejo robusto de archivos y configuraciones
  • Flexibilidad: Soporte para múltiples bases de datos

🎯 Ventajas del Diseño

  • Simplicidad: API muy simple y fácil de usar
  • Estandarización: Formato estándar de cadenas de conexión
  • Reutilizabilidad: Puede usarse en múltiples proyectos
  • Mantenibilidad: Fácil mantenimiento y actualización
  • Escalabilidad: Fácil agregar nuevas bases de datos

🎯 Casos de Uso

🔧 Escenarios de Uso

  • Configuración Inicial: Configuración de conexiones al iniciar la aplicación
  • Múltiples Entornos: Diferentes configuraciones para desarrollo, staging y producción
  • Migración de Configuración: Conversión de configuraciones existentes
  • Desarrollo Local: Configuración para desarrollo local
  • Despliegue: Configuración para diferentes entornos de despliegue

📊 Integración con Entity Framework

// Ejemplo de integración con Entity Framework var configReader = new AliConfigReader("database.ini"); var connectionStrings = configReader.GetConnectionStrings(); // Configurar DbContext services.AddDbContext<MasterDbContext>(options => options.UseSqlServer(connectionStrings["MASTERDB"])); services.AddDbContext<StoreDbContext>(options => options.UseSqlServer(connectionStrings["STOREDB"]));

🔐 Consideraciones de Seguridad

🔒 Seguridad de Credenciales

  • Archivos de Configuración: No incluir archivos con credenciales en el repositorio
  • Encriptación: Considerar encriptar contraseñas en archivos de configuración
  • Variables de Entorno: Usar variables de entorno para credenciales sensibles
  • User Secrets: Usar User Secrets para desarrollo local
  • Azure Key Vault: Usar Key Vault para producción

⚠️ Mejores Prácticas

  • Permisos de Archivo: Restringir acceso a archivos de configuración
  • Logging: No loggear cadenas de conexión completas
  • Validación: Validar parámetros de configuración
  • Backup: Mantener backups de configuraciones

🔗 Integración con Otros Componentes

📚 Componentes Relacionados

  • IniFile: Utiliza IniFile para leer el archivo de configuración
  • Back.API: Puede usar AliConfigReader para configuración de BD
  • Back.Application: Servicios que requieren conexiones a BD
  • Entity Framework: Integración con DbContext
  • RMAuth: Configuración de base de datos de autenticación

🎯 Patrones Relacionados

  • Factory Pattern: Para generación de cadenas de conexión
  • Configuration Pattern: Para manejo de configuración
  • Dependency Injection: Para inyección de configuraciones
  • Builder Pattern: Para construcción de cadenas de conexión