Лучшая практика хранения конфигурации / настроек приложения Java UI - PullRequest
0 голосов
/ 07 декабря 2011

Я исследую, как лучше всего хранить данные конфигурации приложения, поддерживая иерархию и динамическую загрузку.

Примеры данных:

  • Гденайдите каждый столбец (мы бы отобразили много таблиц)
  • Как визуализировать данные в каждом столбце или ячейке (например, в некоторых столбцах могут быть разные способы отображения одной и той же метрики)
  • Формат данных(дата или числа)

Иерархия означает:

У меня есть состояние, в котором есть несколько округов, поэтому будет конфигурация по умолчанию, но состояние может быть переопределеночасти (или все) конфигурации по умолчанию и район могут переопределять части конфигурации состояния.

Динамическая загрузка означает:

Возможность динамической загрузки и применения новой конфигурациибез необходимости перезапуска сервера или даже входа пользователя.

Формат хранения конфигурации (может быть файлы или БД):

  • XML - это то, что я использовал впрошлое
  • JSON - чтобы я мог читать JSON из файла конфигурации или базы данных и сохранять его в виде объекта в памяти приложения
  • пары ключ-значение
  • других форматов?

Что вы думаете / знаете по этому предмету?

Спасибо!

Ответы [ 3 ]

2 голосов
/ 08 декабря 2011

Давным-давно я написал что-то подобное. Это не было предназначено, чтобы быть иерархическим. Он опирался на каждый компонент, имеющий уникальное и разумное имя. Это было до того, как XML и JSON стали модными, поэтому я просто использовал Properties.

По сути, вы начинаете с верхнего окна, просматриваете все его компоненты и, основываясь на его типе (множество instanceofs), вызываете метод (в настоящее время вы бы дали ему более причудливое имя, например "Marshaller" :-) ) выписать соответствующую информацию, которую пользователь может изменить и захотеть восстановить. Применить рекурсивно. Вы получите что-то вроде:

MainFrame.background=#FFFFFF
MainFrame.bounds=200,100,400,500
...
MainFrame.Divider.x=122
...
MainFrame.DataPanel.DataTable.Columns.1.x=423
MainFrame.DataPanel.DataTable.Columns.1.width=22
MainFrame.DataPanel.DataTable.Columns.1.sortedby=Name

Возможно, вы могли бы предположить, что это иерархически, но в настоящее время, вероятно, лучше использовать XML или JSON. Но основная концепция может применяться. Вы можете использовать DIP или что-то еще, чтобы определить правильного маршаллера.

Может быть, это даст вам несколько идей. Может быть, нет стандартного способа. Я удивлен, что никто не ответил «о да, используйте Apache this или Guava that или JGoodies» и т. Д.

0 голосов
/ 10 декабря 2011

Я поддерживаю библиотеку анализатора конфигурационных файлов, которая называется Config4J . Из деталей, которые вы указали в своем вопросе, я не думаю, что Config4J на 100% подходит для ваших нужд. Однако некоторые части его документации могут послужить для вас полезным источником вдохновения.

Я рекомендую вам прочитать главы 2 и 3 руководства «Приступая к работе», чтобы получить достаточно хороший обзор синтаксиса и API. Затем прочитайте Часть II («Создание объектов на основе конфигурации») и Часть III («Пример использования Config4JMS») руководства «Практическое использование». Ссылки на HTML и PDF версии всех руководств приведены внизу веб-сайта Config4J .

0 голосов
/ 07 декабря 2011

Ну, всегда есть API предпочтений Java . Тогда вам не нужно беспокоиться ни об одной из этих вещей.

Addenda:

Популярность (или отсутствие), скорее всего, обусловлена ​​тем фактом, что из коробки «Preferences» предпочтения являются глобальными для всей системы или пользователя. Таким образом, приложения и тому подобное должны создавать свои собственные пространства имен в дереве настроек. Люди более привыкли к тому, что каждый экземпляр имеет свой собственный файл свойств и идет оттуда.

Что касается более сложных структур, Preferences API - это древовидная структура, похожая на XML DOM. Вы разместили узлы в дереве и работаете под этими узлами. Таким образом, вы можете наложить структурированные данные поверх этого представления.

API старый, как и API Java-журналов. Но дизайн довольно простой и полезный, поэтому не было особого требования для его обновления. Каркас коллекций тоже старый, но мы живем с этим счастливо (в основном) каждый день.

...