Me parece que está pidiendo un patrón de diseño (o un conjunto de patrones) que podría utilizar para hacer esto de una manera genérica, a prueba de futuro, ¿no?
Lo ideal sería que algunos de los atributos que es probable que desee
- Cada "transformador" se desacopla el uno del otro.
- Puede agregar fácilmente nuevos "transformadores" sin tener que volver a escribir su rutina principal de "controlador".
- No necesita recompilar/volver a implementar su solución completa cada vez que modifique un transformador, o al menos agregue uno nuevo.
Cada "transformador" idealmente debería implementar una interfaz común que su rutina de controladores conozca - llámela IXmlTransformer. La responsabilidad de esta interfaz es tomar un archivo XML y devolver cualquier modelo de objeto/conjunto de datos que utilice para guardar en la base de datos. Cada uno de sus transformadores implementaría esta interfaz. Para la lógica común compartida por todos los transformadores, puede crear una clase basada en la que todos hereden, o (mi opción preferida) tener un conjunto de métodos auxiliares a los que puede llamar desde cualquiera de ellos.
Comenzaría utilizando una fábrica para crear cada "transformador" de la rutina principal del controlador. La fábrica podría usar la reflexión para interrogar a todas las asambleas que pueda ver, o algo como MEF, que podría hacer mucho por usted. Su lógica de controlador debe usar la fábrica para crear todos los transformadores y almacenarlos.
Luego necesita un poco de lógica y mecanismo para "buscar" cada archivo XML recibido en un Transformador dado; quizás cada archivo XML tenga un encabezado que podría usar para identificar o algo similar. De nuevo, desea mantener estos desacoplados de su lógica principal para que pueda agregar fácilmente nuevos transformadores sin modificar la rutina del controlador. Podría, por ejemplo, suministre el archivo XML a cada transformador y pregúntele "¿puede transformar este archivo?" y depende de cada transformador "responsabilizarse" de un archivo determinado.
Cada vez que su rutina de controlador obtiene un nuevo archivo XML, busca el transformador apropiado y lo ejecuta; el resultado se envía al área de procesamiento de DB. Si no se puede encontrar ningún transformador, vuelque el archivo en un directorio para su posterior interrogación.
Yo recomendaría leer un libro como Principios, patrones y prácticas ágiles por Robert Martin (http://www.amazon.co.uk/Agile-Principles-Patterns-Practices-C/dp/0131857258), que da buenos ejemplos de patrones de diseño apropiados para situaciones como la suya, por ejemplo Fábrica y DIP, etc.
Espero que ayude!
¿Al menos una compañía específica tendrá el mismo formato cada vez que envíe un volcado o puede ser diferente para diferentes volcados? – InSane
Puede generar un xsd del xml y luego un modelo de clase del archivo xsd usando la herramienta xsd de .NET. Y luego crea un ensamblaje para este tipo y cárgalo utilizando el reflejo en tu aplicación. El uso de la clase en la aplicación volvería a utilizar la reflexión para consultar a los miembros, crear instancias y asignar valores. –