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).