2015-09-07 2 views
0

Я запускаю файлы конфигурации в своем приложении для Android, и я нашел версию snakeyaml, которая работает для android (если есть более сильные парсеры, я открыт для чего-либо). Библиотека возвращает hashmaps объектов конфигурации, которые он читает. Я до сих пор довольно новичок в конфигурационных файлах, поэтому я просто опубликую то, что у меня есть прямо сейчас. Это работает, но это дает Hashmap, который состоит из 4 слоев. Это кажется совершенно неправильным.Каков правильный способ структурирования моего файла yaml для моего приложения для Android?

--- 
Games: 
Drag Race: 
    Avatar: 
    classic: 
    color: 
    - black 
    - blue 
    - green 
    - red 
    - yellow 
    fastback: 
    color: 
    - black 
    - blue 
    - olive 
    - red 
    - white 
    lux: 
    color: 
    - blue 
    - gunmetal 
    - orange 
    - violet 
    - white 
    old: 
    color: 
    - black 
    - blue 
    - purple 
    - red 
    - white 
Race to Mars: 
    avatar: 
    ship: 
    - red 
    - blue 
    - yellow 

Моя конечная цель сохранить следующее:

  • список видов игр
  • список аватаров для каждого типа игры
  • список цветов для каждого аватара

Каждый список зависит от последнего. Мой нынешний подход кажется очень волосатым и потенциально проблематичным.

ответ

1

Это ограниченные данные, так что трудно делать обобщения, но мне кажется, что ship, old и classic являются типы аватаров, так что вы могли бы сделать, что атрибут рядом с цветом:

Games: 
Drag Race: 
    Avatar: 
    type: classic: 
    color: 
    - black 
    - blue 
    - green 
    - red 
    - yellow 
    type: fastback 
    color: 
    - black 
    - blue 
    - olive 
    - red 
    - white 
    type: lux 
    color: 
    - blue 
    - gunmetal 
    - orange 
    - violet 
    - white 
    type: old 
    color: 
    - black 
    - blue 
    - purple 
    - red 
    - white 
Race to Mars: 
    avatar: 
    type ship: 
    color: 
    - red 
    - blue 
    - yellow 

и теряют один уровень глубины. Вы также можете переместить гонку типа на каждом аватаре:

Games: 
    - race: drag 
    type: classic: 
    color: 
    - black 
    - blue 
    - green 
    - red 
    - yellow 
    - race: drag 
    type: fastback 
    color: 
    - black 
    - blue 
    - olive 
    - red 
    - white 

и тем самым сделать аватар неявное под игры (вы можете, конечно, делать это только тогда, когда нет ничего другого в рамках игры, но аватары

. Вышеизложенное основано на общем принципе, что вы можете обменивать атрибуты объекта с иерархическими группировками объектов в древовидной структуре и vv.

+0

Я дам им попробовать сегодня вечером. Итак, по вашему мнению, вы подразумеваете, что это не страшно иметь вложенные хэш-карты при загрузке конфигурационных файлов? – Shadoninja

+0

@Shadoninja Нет, это не так, вы должны иметь некоторые подпрограммы/объекты для доступа к объектам (и, при необходимости, их запись/обновление) и убедитесь, что только они должны знать, как получить доступ к фактической структуре. После этого не имеет значения, насколько глубоко вложены вложения. Увидите это как наличие нескольких уровней каталогов и не помещайте все в корень вашей файловой системы: да, вам нужно знать путь к вашему файлу, но поэтому все, что принадлежит друг другу, хорошо сгруппировано. – Anthon

+0

Хорошо, это тот ответ, который я искал. Вчера вечером я собрал класс конфигурации, чем захватывал информацию с разных уровней вложенных хэш-карт. API оказался довольно чистым. Благодарю. – Shadoninja

Смежные вопросы