Domanda

Sto cercando di creare un programma di convalida dei messaggi e vorrei creare regole facilmente modificabili che si applicano a determinati tipi di messaggi. A causa del rischio di modifica delle regole, ho deciso di definire queste regole di convalida esterne al codice oggetto.

Ho creato un'interfaccia di base che definisce una regola e mi chiedo quale sarebbe il modo migliore per archiviare questi semplici dati. Ero incline all'XML ma sembra che potrebbe essere troppo pesante.

Ogni regola richiederebbe solo un set di dati molto piccolo (ovvero tipo di regola, valore, maschera applicabile, ecc.)

Qualcuno sa di una buona risorsa che potrei guardare che avrebbe una funzionalità simile. Preferirei non approfondire troppo l'XML su un problema che a malapena necessita di un sottoinsieme delle funzionalità che vedo nella maggior parte degli esempi in cui mi imbatto.

Se trovo un esempio conciso da esaminare, sarei in grado di decidere se utilizzare o meno un file semplice.

Grazie in anticipo per il tuo contributo!

È stato utile?

Soluzione

Personalmente, per XML piccolo, facilmente modificabile, trovo TinyXML essere un biblioteca eccellente. Puoi fare in modo che ogni classe comprenda il proprio formato, quindi la tua gerarchia di oggetti è rappresentata direttamente nell'XML.

Tuttavia, se non ritieni di aver bisogno di XML, potresti voler utilizzare uno spazio di archiviazione più leggero come yaml . Trovo che sia molto più facile capire i dati sottostanti, modificarli ed estenderne le funzionalità.

(Inoltre, boost :: serialization ha un archivio XML, ma non è ciò che definirei facilmente modificabile)

Altri suggerimenti

Il più semplice è usare un file flat progettato per essere facile da analizzare usando C ++ > > operatore. Solo semplici token separati da spazi bianchi.

Bene, se vuoi che le tue regole siano leggibili dall'uomo, XML è la strada da percorrere e puoi interfacciarlo bene con c ++ usando xerces . Se vuoi prestazioni e / o dimensioni, puoi salvare i dati come binari usando semplici strutture.

Un altro modo per implementarlo sarebbe definire le tue regole in XML Schema e quindi fare in modo che uno strumento XML Data Binding generi il corrispondente modello a oggetti C ++ insieme al codice di analisi e serializzazione XML. Uno di questi strumenti (su cui mi capita di lavorare) è CodeSynthesis XSD:

http://www.codesynthesis.com/products/xsd/

Per una panoramica di 2 minuti dell'idea, vedi il "Ciao mondo" esempio nella documentazione di mappatura C ++ / Tree.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top