Sta usando l'odore del codice MultiMaps? In caso affermativo, quali strutture di dati alternative si adattano alle mie esigenze?

3

Sto provando a modellare i personaggi di nWoD per un gioco di ruolo in un programma di creazione di personaggi. Il punto cruciale è che voglio supportare anche il salvataggio e il caricamento dai documenti yaml.

Un aspetto del personaggio è il loro insieme di abilità. Le abilità sono suddivise in esattamente tre "tipi": mentale, fisico e sociale. Ogni tipo ha una lista di abilità sotto se. Il mio Yaml ha questo aspetto:

PHYSICAL:
    Athletics: 0
    Brawl: 3
MENTAL:
    Academics: 2
    Computers

Il mio pensiero iniziale era di usare un multimap di qualche tipo, e avere il tipo di abilità come Enum, e la chiave per la mia mappa. Ogni Abilità è un elemento della collezione che supporta la multimap.

Tuttavia, ho faticato per far funzionare lo yaml . Spiegando questo a un collega al di fuori del lavoro, hanno detto che probabilmente questo era un segno di odore di codice, e non l'ha mai visto usare "bene".

Le multiMaps sono davvero un codice odore? In caso affermativo, quali strutture di dati alternative si adatterebbero ai miei obiettivi?

    
posta Pureferret 26.06.2014 - 23:43
fonte

1 risposta

2

Un paio di note:   

  •      Mai deserializzare YAML non attendibile. Nella maggior parte dei parser YAML questo consente l'esecuzione di codice arbitrario. In SnakeYAML, puoi evitarlo, ma devi stare molto attento e il rischio sembra non necessario .

    Poiché hai solo bisogno di un archivio di valori-chiave, consiglierei invece JSON, che mi porta a:   

  •   
  •      Usa le stringhe come chiavi, e converti dalle stringhe alle enumerazioni dopo il caricamento (puoi farlo con un'istruzione switch o tramite reflection). Ciò evita la necessità di chiamare i costruttori Java dal parser YAML e quindi elimina la vulnerabilità della sicurezza. La conversione può essere effettuata facilmente dove necessario, e si spera che non causerà molto rallentamento.     
  • risposta data 23.07.2014 - 02:56
    fonte

    Leggi altre domande sui tag