Java: настройки API против конфигурации Apache Commons - PullRequest
6 голосов
/ 23 февраля 2010

Мне нужно разрешить пользователю хранить / загружать произвольное количество списков объектов (предположим, что они сериализуемые). Концептуально я хочу модель данных типа

class FooBean { /* bean stuff here */ }

class FooList {
    final private Set<FooBean> items = new HashSet<FooBean>();

    public boolean add(FooBean item) { return items.add(item); }
    public boolean remove(FooBean item) { return items.remove(item); }
    public Collection<FooBean> getItems() { 
       return Collections.unmodifiableSet(items); 
    }
}

class FooStore {
    public FooStore() {
       /* something... uses Preferences or Commons Configuration */ 
    }
    public FooList load(String key) {
       /* something... retrieves a FooList associated with the key */ 
    }
    public void store(String key, FooList items) { 
       /* something... saves a FooList under the given key */
    }
}

Должен ли я использовать Preferences API или Commons Config ? В чем преимущества каждого?

Ответы [ 4 ]

6 голосов
/ 08 марта 2010

Итак, конфигурация commons, как и многие другие проекты apache, представляет собой уровень абстракции, позволяющий без особого труда использовать настройки, хранилище ldap, файлы свойств и т. Д. Таким образом, ваш вопрос может быть переписан следующим образом: вам нужно будет изменить формат, который вы используете для хранения ваших предпочтений? Если нет, предпочтение отдается предпочтениям Java. В другом месте рассмотрим переносимость конфигурации общего достояния.

2 голосов
/ 09 марта 2010

Учитывая ваш пример хранения набора значений, связанных с ключом, у вас могут быть следующие параметры при использовании каждой библиотеки

  • Предпочтения - сохранить как байтовый массив, связанный с ключом
  • Commons Configuration - сохранить в виде списка строк, связанных с ключом

Таким образом, выбор может зависеть от того, проще ли преобразовать FooBean в байтовый массив или строку.

Другим преимуществом Commons Configuration являются различные бэкэнды. Я использовал его для хранения свойств в базе данных. Если вы хотите хранить объекты где-то, кроме локальной машины пользователя, это был бы лучший выбор.

1 голос
/ 01 декабря 2010

Commons Configuration не подходит для хранения структур сложных объектов. Вам лучше использовать платформу сериализации.

1 голос
/ 08 марта 2010

Я бы обычно использовал Preferences API, который является частью JDK, если нет проблем, которые иначе решаются с помощью commons-config.

Лично, когда я использую Spring, у него есть Конфигуратор свойств, который делает большинство из них для меня.

...