Я должен позволить пользователю хранить/загружать произвольное число списков объектов (предположите, что они являются сериализуемыми). Концептуально я хочу модель данных как
class FooBean { /* bean stuff here */ }
class FooList {
final private Set items = new HashSet();
public boolean add(FooBean item) { return items.add(item); }
public boolean remove(FooBean item) { return items.remove(item); }
public Collection 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 */
}
}
Я должен использовать Предпочтения Конфигурация палаты общин или API? Каковы преимущества каждого?
Что ж, commons-configuration, как и многие другие проекты apache, является слоем абстракции, позволяющим без всякого видения использовать настройки, хранилище ldap, файлы свойств и т. Д. Итак, ваш вопрос можно переписать как есть: нужно ли вам изменить формат, который вы используете для хранения ваших предпочтений? Если нет, предпочтительнее использовать настройки Java. В другом месте рассмотрите переносимость общей конфигурации.
Учитывая ваш пример с хранением набора значений, связанных с ключом, у вас будут следующие варианты при использовании каждой библиотеки
Таким образом, выбор может сводиться к тому, что легче преобразовать FooBean в байтовый массив или в строку.
Другим преимуществом Commons Configuration является возможность использования различных бэкендов. Я использовал его для хранения свойств в базе данных. Если вы хотите хранить объекты где-то еще, кроме локальной машины пользователя, это будет лучшим выбором.
Обычно я использую Preferences API, который является частью JDK, если нет проблем, которые иначе решаются с помощью commons-config.
Лично, когда я использую Spring, у него есть Property Configurer, который делает большую часть этого за меня.