Sto considerando di passare xml avanti e indietro per i messaggi di errore, ma ogni errore ha scenari diversi.
una situazione a portata di mano sta passando il confronto del testo diffuso mentre altre sono semplici come passare un messaggio di testo.
Che tipo di strategia di serializzazione / deserializzazione potrei usare per uno scenario del genere?
Il problema principale con uno scenario come questo è che l'oggetto è diverso da caso a caso e deve esserci un meccanismo per identificare il tipo che è.
Serializzare xml è piuttosto semplice:
Fin dall'inizio mi vengono in mente tre idee sciatte:
- Crea una super classe che contenga ogni possibilità di contenuto tipi.
- Crea un meccanismo per leggere prima l'xml da identificare cosa c'è dentro.
- Utilizzare l'opzione 2 e convertire il corpo interno xml in un oggetto.
Un approccio più elegante sarebbe quello di implementare una sorta di modello di azione, in cui, una volta identificato l'oggetto, è possibile creare l'azione appropriata da portare con sé.
Alcune idee sono costituite dal pattern Action / Executor o IoC:
Ecco un'idea di esempio di esempio che corre parallela a ciò che sto pensando:
Non per la persistenza dei dati ma per la gestione degli errori da parte del client: Il client decide come gestire l'errore una volta ricevuto basato sull'azione da una libreria di base che si svolge dopo la deserializzazione.
il mio formato xml considerato sarebbe qualcosa del tipo:
errore diff:
<errorMessage>
<header>The header is not correct</header>
<body>
<diffErrorArray>
<diffItem message="NoChange">
<customMessage>Correct</customMessage>
<source>HeaderColumn1</source>
<destination>HeaderColumn1</destination>
</diffItem>
<diffItem message="Replace">
<customMessage>Changed</customMessage>
<source>HeaderColumn1</source>
<destination>Header_Column_1</destination>
</diffItem>
<diffItem message="AddDestination">
<customMessage>Unknown</customMessage>
<source></source>
<destination>Header_Column_1</destination>
</diffItem>
<diffItem message="DeleteSource">
<customMessage>Missing</customMessage>
<source>HeaderColumn2</source>
<destination></destination>
</diffItem>
</diffErrorArray>
</body>
</errorMessage>
errore stringa:
<errorMessage>
<header>Bad news</header>
<body>
<stringErrorMessage>Something really bad happened.</stringErrorMessage>
<body>
</errorMessage>