Sto cercando di implementare uno standard ISO che per sommario ha il seguente:
- Ci sono
operations
(come un'azione in MVC) - Sono presenti rispettivamente
request
eresponse
per operazione - Questi
requests
eresponses
hanno il corrispondenteXSD
di - Questi
XSD
stanno cambiando ogni anno (come da mia osservazione)
Ecco le mie sfide per ora:
-
La generazione di classi da
XSD
aC#
(tramite la riga di comando VS) sono così dolorose. Ci sono alcune classi comeHeader
eEnum
che sono comuni a questiXSD
s ma vengono generate separatamente. -
Ho solo bisogno di proprietà specifiche per ogni
response
, gli altri valori saranno mappati alla suaresponse
come valori di ritorno. Che crea un conflitto a causa del mio problema in # 1mapping the header from the request to response is not straightforward because they are of different classes. Same for other classes and enum values.
-
Posso mappare manualmente questi valori da
request
aresponse
di tutto iloperations
di cui ho bisogno. Ma ora il mio problema è l'articolo 4 dal mio riassunto sopra. QuestiXSD
stanno ricevendo aggiornamenti all'anno. Ho visto una quantità considerevole di cambiamenti dalla versione dello scorso anno ad ora come nuovi valori aggiunti a enum e nuovi elementi in XML.
Ecco i miei pensieri per la prossima azione:
- Esiste un generatore di classi da
XSD
aC#
che sia abbastanza intelligente da non duplicare le classi e le enumerazioni comuni? Questo risolverà principalmente il mio problema in quanto il mappatore sarà facilmente creato. Ma farlo manualmente è un problema di scadenze e anche la modifica diXSD
. - Se il n. 1 non è una soluzione fattibile, penso a
PropertyCopiers
che può mappare valori di classi diverse. Ma non ho cercato su tali copiatrici che possano mappare classi annidate (deep copier di proprietà). Mi baserei solo supropertyNames
che posso dire non è abbastanza affidabile e la riflessione è piuttosto lenta. -
La mia ultima risorsa sta facendo manualmente il mapper come:
DifferentClass1.SamePropertyName1 = DifferentClass2.SamePropertyName1
e basta fare di nuovo un altro mapper il prossimo anno quando arriverà la versione successiva.