La situación es que tengo una tabla que modela una entidad. Esta entidad tiene varias propiedades (cada una identificada por una columna en la tabla). La cuestión es que, en el futuro, necesitaría agregar nuevas propiedades o eliminar algunas. El problema es cómo modelar tanto la base de datos como el código correspondiente (usando C#) para que cuando aparezca esa ocasión sea muy fácil simplemente "tener" una nueva propiedad.Genéricos y base de datos: un problema de diseño
En el principio era sólo una propiedad, así que tenía una columna. Definí la propiedad correspondiente en la clase, con el tipo y el nombre apropiados, luego creé los procedimientos almacenados para leerla y actualizarla. Luego vino la segunda propiedad, copiado rápidamente, cambiado el nombre y tipo y un poco de SQL, y ahí estaba. Obviamente, este no es un modelo adecuado para el futuro. En este momento, algunos de ustedes pueden sugerir un ORM (EF u otro) porque esto generará el SQL y el código automáticamente, pero por ahora esta no es una opción para mí.
pensé en tener un solo procedimiento para la lectura de una propiedad (por nombre de la propiedad) y otra para actualizarlo (por nombre y valor) a continuación, algunos procedimientos generales para la lectura de un grupo o todas las propiedades de una entidad en la misma declaración . Esto puede sonar fácil en C# si considera usar genéricos, pero la base de datos no conoce los genéricos, por lo que no es posible tener una solución sólida.
Me gustaría tener una solución que es "tan fuertemente tipificado como sea posible", así que no necesito hacer un montón de fundición y de análisis. Definiría las propiedades disponibles en el código para que no adivine qué tiene disponible y use cadenas de magia y cosas por el estilo. Entonces, el proceso de agregar una nueva propiedad en el sistema solo significaría agregar una nueva columna a la tabla y agregar una nueva "definición" de propiedad en el código (por ejemplo, en una enumeración).
¿Por qué no puedes usar el EF? Los genios de Microsoft ya se dieron cuenta y trabajaron mucho en este sentido. Odiaría verte volver a inventar la rueda. – Jay
Sí, no entiendo por qué necesita evitar un ORM. (Además, no tengo idea de qué tienen que ver los genéricos C# con nada de esto) –
Estoy de acuerdo, pero EF está un poco más adelante en lo que respecta a la arquitectura, así que no puedo usarla todavía. – CyberDude