Tenemos código XML almacenado en un solo campo de base de datos relacional para evitar los problemas de la base de datos Entidad/Atributo/Valor, sin embargo, no quiero que esto arruine mi Dominio de modelado, DTO y repositorio. No puedo evitar el contenido de EAV/CR, pero puedo elegir cómo almacenarlo. La pregunta es ¿cómo lo usaría?¿Cómo se define un objeto C# en tiempo de ejecución?
¿Cómo podría convertir los metadatos XML en una clase/objeto en tiempo de ejecución en C#?
Por ejemplo:
XML describiría que tenemos una receta de comida que tiene varios atributos, pero suelen ser similares, y uno o más atributos acerca de hacer la comida. La comida en sí puede ser literalmente cualquier cosa y tener cualquier tipo de preparación loca. Todos los atributos se buscan y pueden vincular a la información nutricional existente.
// <-- [Model validation annotation goes here for MVC2]
public class Pizza {
public string kind {get; set;}
public string shape {get; set;}
public string city {get; set;}
...
}
y en el ActionMethod:
makePizzaActionMethod (Pizza myPizza) {
if (myPizza.isValid()) { // this is probably ModelState.isValid()...
myRecipeRepository.Save(myPizza);
return View("Saved");
}
else
return View();
}
Suponiendo que el repositorio no sería pizza específica. –
¿El XML tiene un esquema? Luego puede usar el esquema para generar código. Si no, entonces necesitas un lenguaje dinámico, no C#. –
Podemos tener un esquema para el XML. La clase de receta en realidad no cambia una vez que existe, pero las nuevas clases de recetas se pueden crear sobre la marcha. Diría aproximadamente 15-20 clases de recetas por tipo de cliente, y tenemos muchos tipos diferentes de clientes, a todos les gusta comer. –