Analisi XML C ++: suggerimenti sull'approccio per l'analisi e la memorizzazione dei dati

6

Sto cercando di sviluppare un'applicazione C ++ per analizzare xml (usando il framework rapidxml), e vorrei qualche consiglio su come affrontarlo.

Il file che voglio analizzare è un file di gioco XML che definisce una serie di componenti aggiuntivi per una nave stellare ('abiti'), che hanno diversi attributi in comune (come nome e costo), ma rientrano anche in varie categorie.

Ad esempio: Armi fisse: range, rate of fire

Armi torretta, portata, velocità di fuoco, velocità di rotazione della torretta

Afterburners: modificatore di accelerazione, velocità di combustione del carburante

etc etc etc

Ci sono almeno 5 classificazioni di abiti (e dicono 3 o 4 abiti che rientrano in ciascuna categoria), e alcuni, come le armi, hanno alcuni attributi in comune l'uno con l'altro, ma non con altre categorie come i postbruciatori.

Voglio scrivere il codice di analisi per gestire ogni tipo di oggetto e memorizzare i suoi dati negli oggetti. Voglio anche minimizzare quanto codice devo ridigitare (ad esempio, utilizzare un buon stile OOP in modo da poter aggiungere nuove categorie o modificare quelle esistenti in futuro).

Qual è il modo migliore per avvicinarsi a questo? Ho già avviato il programma, ma mi piacerebbe avere qualche input sull'approccio migliore.

Dato che questa è una domanda molto ampia, ti darò alcuni dei miei pensieri / domande specifiche in modo da poter vedere quello che sto cercando:

  • Dovrei avere una classe base chiamata 'outfit' e usare l'ereditarietà per personalizzare l'analisi per ogni categoria specifica (cioè 'armi fisse')? Devo avere più livelli di ereditarietà per categorie simili (ad esempio "armi"). Come posso minimizzare la ridigitazione del codice, quindi devo solo scrivere le routine specifiche per ogni categoria?

  • Dove devo gestire gli errori: in "vestito" o nelle classi derivate? Quanto ho bisogno di gestire gli errori?

  • Come posso accedere facilmente a questi oggetti in seguito? Dovrei creare un oggetto elenco con un vettore contenente ciascun oggetto? Come posso accedere a ciascun oggetto per nome?

Qualsiasi input è apprezzato; non devi dare un resoconto completo e completo su come farlo (anche se sarebbe bello: P).

    
posta Biosci3c 16.10.2011 - 20:18
fonte

3 risposte

2
  1. Ciascuno dei tipi di oggetto - Le armi, per esempio, dovrebbero formare una gerarchia di classi usando l'ereditarietà. Gli attributi di questo sono noti e devono condividere l'attributo comune nel modo giusto. (alcune volte vengono definiti oggetti entità).

  2. Dovrebbe esserci una sola classe chiamata qualcosa come arsenal che prenderà XML come input e produrrà una lista di oggetti secondo la definizione di cui sopra. L'output è costruito oggetti entità come qualsiasi altro oggetto - non è necessario toccare XML dopo.

  3. L'output dell'arsenale può essere un vettore (modello) per poter accedere facilmente.

  4. Gestione degli errori: non ne hai specificato molto, ma come regola generale, dovresti provare a gestire le eccezioni per ogni classe, cioè ogni classe dovrebbe avere la propria serie di regole per il tipo di eccezione che possono generare. Per esempio. se rate_of_fire > MAX rate_of_fire = MAX: questo dovrebbe essere fatto all'interno della classe principale e l'applicazione non dovrebbe preoccuparsi di ciò.

risposta data 09.11.2011 - 03:55
fonte
1

Userei CodeSynthesis per analizzare XML in un oggetto (questo può essere utilizzato per gestire qualsiasi classe CodeSynthesis) e poi usare questi oggetti per creare gli oggetti relativi al gioco con una classe builder. Queste classi CodeSynthesis possono essere facilmente serializzate in XML come e quando richiesto.

    
risposta data 01.12.2011 - 15:17
fonte
0

Prova prima a scrivere il codice o lo pseudo codice che usa e manipola gli oggetti nel corpo principale del gioco. Ciò può fornire informazioni su come dovrebbe essere la gerarchia degli oggetti. Valuterà almeno il tuo elenco + l'approccio di archiviazione vettoriale.

Le gerarchie di classi profonde sono fuori moda - la tua app potrebbe essere un'eccezione, ma cerca di comporre oggetti con classi helper per ridurre la ripetizione del codice.

Pensa al modello di builder, in cui gli oggetti di un'altra classe sono responsabili dell'analisi XML e restituiscono l'oggetto principale completamente formato. Ciò ridurrà la complessità delle tue classi principali e sarà utile se il formato di archiviazione cambia.

    
risposta data 17.10.2011 - 08:57
fonte

Leggi altre domande sui tag