kzen.dev
  • Вопросы
  • Метки
  • Пользователи
Оповещения
Вознаграждения
Регистрация
После регистрации, сможете получать уведомления об ответах и комментариях на Ваши вопросы.
Вход
Если у Вас уже есть аккаунт, войдите чтобы проверить новые уведомления.
Тут будут вознаграждения за добавленные вопросы, ответы и комментарий.
Дополнительно
Источник
Редактировать
 ninesided
ninesided
Вопрос

Файлы конфигурации приложения

Хорошо, я не хочу начинать священную войну, но мы находимся в процессе попытки консолидировать способ работы с конфигурационными файлами наших приложений, и нам трудно принять решение о наилучшем подходе. На данный момент каждое приложение, которое мы распространяем, использует свои собственные специальные файлы конфигурации, будь то файлы свойств (в стиле ini), XML или JSON (пока только для внутреннего использования!).

В настоящее время большая часть нашего кода написана на Java, поэтому мы изучили Apache Commons Config, но обнаружили, что он довольно многословен. Мы также рассмотрели XMLBeans, но он кажется нам слишком многословным. Я также чувствую, что меня подталкивают к XML как формату, но мои клиенты и коллеги опасаются пробовать что-то другое. Я могу понять это с точки зрения клиента, все слышали об XML, но в конце концов, разве не следует использовать правильный инструмент для работы?

Какие форматы и библиотеки люди используют в производственных системах в наши дни, пытается ли кто-нибудь еще избежать налога на угловые скобки?

_Edit: действительно должно быть кроссплатформенным решением: Linux, Windows, Solaris и т.д., и выбор библиотеки, используемой для взаимодействия с конфигурационными файлами, так же важен, как и выбор формата.3.

37 2008-08-15T11:19:51+00:00 15
 ninesided
ninesided
Редактировал вопрос 14-го декабря 2015 в 10:59
Программирование
java
cross-platform
xml
json
configuration-files
 engtech
engtech
15-го августа 2008 в 2:17
2008-08-15T14:17:33+00:00
Дополнительно
Источник
Редактировать
#8415800

И YAML, по той простой причине, что это делает для очень легко читаются файлы конфигурации по сравнению с XML.

XML-код:

<user id="babooey" on="cpu1">
    <firstname>Bob</firstname>
    <lastname>Abooey</lastname>
    <department>adv</department>
    <cell>555-1212</cell>
    <address password="xxxx">[email protected]</address>
    <address password="xxxx">[email protected]</address>
</user>

И YAML:

    babooey:
        computer : cpu1
        firstname: Bob
        lastname: Abooey
        cell: 555-1212
        addresses:
            - address: [email protected]
              password: xxxx
            - address: [email protected]
              password: xxxx

Примеры были взяты с этой страницы: http://www.kuro5hin.org/story/2004/10/29/14225/062

28
0
Anders Eurenius
Anders Eurenius
15-го августа 2008 в 3:19
2008-08-15T15:19:04+00:00
Дополнительно
Источник
Редактировать
#8415802

Во-первых: это действительно большой вопрос дискуссии, а не быстрый Q+А.

Мой любимый сейчас-это просто включить Луа, потому что

  • Я могу позволить такие вещи, как ширина=высота*(1+1/3)
  • Я могу сделать пользовательские функции, доступные
  • Мне могут запретить что-нибудь еще. (невозможно, например, Python (включая соленые огурцы.))
  • Я'будете, вероятно, хотите скриптовый язык где-то еще в проекте в любом случае.

Другой вариант, если там's большое данных является использование и sqlite3, потому что они'вэ права требования

  • Небольшой.
  • Быстро.
  • Надежный.

Выбрать любые три.

На что я хотел бы добавить:

  • резервное копирование-это несложно. (просто скопировать файл db.)
  • легче переключиться на другую БД, через ODBC, что угодно. (чем это от уродец-файл)

Но опять же, это большая проблема. А "большие" в ответ на это, вероятно, предполагает какую-то особенность матрицы или список ситуаций, как:

Количество данных, или короткое время выполнения

  • Для больших объемов данных, возможно, потребуется эффективное хранение, как дБ.
  • Для небольших тиражей (часто), вы, возможно, захотите, что-то, что вы Don'т нужно много разбора, учитывать то, что может быть через mmap:Изд-во напрямую.

Какие конфигурации касаются?

  • Ведущий:
  • Мне нравится и YAML в /etc. Это переопределен в Windows?
  • Пользователей:
  • Вы разрешить пользователям редактировать конфиг в текстовом редакторе?
  • Это должно быть централизованно управляемым? Реестра / переименовать / удаленной БД?
  • Может ли пользователь иметь несколько различных профили?
  • Проект:
  • Файл(ы) в каталог проекта? (Контроль версий, как правило, следует этой модели...)

Сложности

  • Есть только несколько плоских ценности? Рассмотреть и YAML.
  • Данные являются вложенными, или зависимыми в некотором роде? (Это где это становится интересным.)
  • Она может быть желательна, чтобы позволить некоторую форму сценария?
  • Шаблоны можно рассматривать как своего рода конфигурационные файлы..
14
0
Решение / Ответ
Анонимный пользователь
15-го августа 2008 в 1:45
2008-08-15T13:45:26+00:00
Дополнительно
Источник
Редактировать
#8415797

XML В ФОРМАТЕ XML XML В ФОРМАТЕ XML. Мы're говоря здесь файлы конфигурации. Там нет "угол налоговый кронштейн" Если вы'повторно не сериализации объектов в напряженной ситуации.

Конфигурационный файл должен быть читабельным и человека, понятно, в дополнение к машиносчитываемым. XML-это хороший компромисс между двумя.

Если ваш магазин есть люди, которые боятся, что новомодные технологии XML, я чувствую себя плохо для вас.

10
0
 Kev
Kev
15-го августа 2008 в 12:24
2008-08-15T12:24:13+00:00
Дополнительно
Источник
Редактировать
#8415793

Не начиная новую священную войну, чувства, выраженные в посте 'Налог на угловые скобки' - это одна из областей, где я в основном не согласен с Джеффом. В XML нет ничего плохого, он достаточно удобен для чтения человеком (так же, как YAML, JSON или INI-файлы), но помните, что он предназначен для чтения машинами. Большинство комбинаций языка/фреймворка поставляются с каким-либо парсером XML бесплатно, что делает XML довольно хорошим выбором.

Кроме того, если вы используете хорошую IDE, такую как Visual Studio, и если XML поставляется со схемой, вы можете передать схему в VS и волшебным образом получить интеллисенс (например, вы можете получить его для NHibernate).

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

Это все еще говорит мне о XML и о том, почему он все еще является правильным выбором для файлов конфигурации (из Tim Bray):

"Если вы хотите предоставить данные общего назначения, с которыми получатель может захотеть сделать непредвиденные странные и безумные вещи, или если вы хотите быть действительно параноидальным и придирчивым к i18n, или если то, что вы отправляете, больше похоже на документ, чем на структуру, или если порядок данных имеет значение, или если данные потенциально долговечны (например, больше секунд), XML - это то, что нужно. Мне также кажется, что комбинация XML и XPath является идеальным решением для форматов данных, которые должны быть расширяемыми; то есть, довольно легко написать код обработки XML, который не даст сбоев при изменениях в формате сообщения, не затрагивающих ту часть, о которой вы заботитесь.".

9
0
 Herms
Herms
15-го августа 2008 в 8:26
2008-08-15T20:26:46+00:00
Дополнительно
Источник
Редактировать
#8415804

@Парень

Но конфигурации приложения-это'т всегда просто пары ключ/значение. Смотреть на что-то вроде конфигурации Tomcat для какие порты он слушает. Здесь'ы пример:

    <Connector port="80" maxHttpHeaderSize="8192"
           maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
           enableLookups="false" redirectPort="8443" acceptCount="100"
           connectionTimeout="20000" disableUploadTimeout="true" />

    <Connector port="8009" 
           enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />

Вы можете иметь любое количество разъемов. Определить в файл и существует несколько разъемов. Дон'т определить больше и больше не существует. Там's не хороший способ (имхо) для этого старый добрый пар ключ/значение.

Если ваше приложение'ы config-это простой, то что-то простое, как ini-файл, который's прочитав в словаре, наверное, хорошо. Но на что-то более сложное, как конфигурации сервера, ini-файл будет огромная боль, чтобы поддерживать, а что-то более структурное, таких как XML или YAML будет лучше. Все зависит от поставленной задачи.

5
0
Lars M&#230;hlum
Lars Mæhlum
15-го августа 2008 в 2:26
2008-08-15T14:26:55+00:00
Дополнительно
Источник
Редактировать
#8415801

С XML, ФОРМАТ JSON, INI-ФАЙЛ. Все они имеют свои сильные и слабые стороны. В контекст приложения, я считаю, что уровень абстракции-это главное. Если вы можете выбрать способ структуризации данных, что является хорошим компромиссом между читаемости и как вы хотите получить доступ к/абстрактные данные в код, вы'вновь золотой.

Мы в основном используем XML, в котором я работаю, и я не могу действительно верить, что конфигурационный файл загружается в кэш как объекты для первого чтения или после того, как она была написана, и затем абстрагированные от остальной части программы, На самом деле является большой нажмите на ни процессора, ни дискового пространства. И это очень четкий, как долго, как вы структуру файла.

И на всех языках на всех платформах поддерживает XML через несколько довольно общих библиотек.

2
0
Clint Davis
Clint Davis
15-го августа 2008 в 12:41
2008-08-15T12:41:32+00:00
Дополнительно
Источник
Редактировать
#8415795

Мы используем стиль ini файлы конфигурации. Мы используем [Нини][1] библиотека для управления ими. Нини делает его очень проста в использовании. Нини была вообще для .Но она была портирована на другие платформы с использованием моно.

[1]: http://nini.sourceforge.net/ с "Когда и"

2
0
 epatel
epatel
15-го августа 2008 в 1:58
2008-08-15T13:58:27+00:00
Дополнительно
Источник
Редактировать
#8415799

@Гермами

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

Что вы часто получаете то также рекомендуемые способы эти должны/могут быть изменены. Как в меню Настройки в программе или на панели конфигурации в "Мои Системные настройки" и по применению (для системы программного обеспечения т. е. услуги). Не позволяя конечным пользователям изменять их напрямую через regedit или блокнот...

Почему?

  1. Конечные пользователи (=клиентов) используются для своих платформ
  2. Система резервного копирования может лучше сэкономить на "Безопасный установок" и т. д.

@ninesided

О том, что " choice из library " и попробуйте перейти по ссылке в (статическая ссылка) любой выбранной библиотеке, чтобы снизить риск попадания в версии-конфликт-войны на конечных пользователей машины.

 epatel
epatel
Редактировал ответ 15-го августа 2008 в 2:09
1
0
Анонимный пользователь
19-го мая 2009 в 4:40
2009-05-19T16:40:22+00:00
Дополнительно
Источник
Редактировать
#8415805

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

Если ваши данные немного сложнее, с вложенности и т. д., Вы, вероятно, лучше про YAML, XML или базы данных SQLite.

Если вам нужны вложенные данные и/или возможность запрашивать данные конфигурации после загрузки, использовать XML или SQLite. Оба очень хорошо языки запросов (XPath и SQL) для структурированных/вложенные данные.

Если данные конфигурации весьма нормализуется (например, 5-й нормальной форме) вы лучше с SQLite, потому что SQL-это лучше для работы с высоко нормализованные данные.

Если вы планируете записать данные в настройки установить во время работы программы, то вам лучше пойти с SQLite. Например, если вы не загрузка конфигурационных данных с другого компьютера, или если вы основываете будущее выполнение программы решения на данных, собранных в предыдущие выполнение программы. Базы данных SQLite реализует очень надежный механизм хранения данных, который крайне сложно повредить, когда у вас есть перебои в подаче электроэнергии или программ, которые висят в несогласованном состоянии из-за ошибок. Тленное данных приводит к высоким затратам полевой поддержки, и SQLite будет делать гораздо лучше, чем любое решение или даже популярные библиотеки по XML или YAML.

Проверить мою страницу для получения более подробной информации на базе SQLite.

 CharlesB
CharlesB
Редактировал ответ 12-го марта 2013 в 9:13
1
0
 AnthonyAlmighty
AnthonyAlmighty
13-го ноября 2012 в 5:54
2012-11-13T17:54:13+00:00
Дополнительно
Источник
Редактировать
#8415806

Я думаю, что единственная важная вещь, это выбрать формат, который вы предпочитаете и можете быстро сориентироваться. XML и JSON и прекрасные форматы конфигов и широко поддерживается--техническая реализация это'т в суть вопроса, по-моему. Это'ы 100% о том, что делает задачу конфигурационными файлами проще для вас.

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

0
0
 rjzii
rjzii
15-го августа 2008 в 12:04
2008-08-15T12:04:00+00:00
Дополнительно
Источник
Редактировать
#8415792

Насколько я знаю, реестр Windows больше не является предпочтительным способом хранения конфигурации, если вы используете .NET - большинство приложений теперь используют System.Configuration [1, 2]. Поскольку он также основан на XML, кажется, что все движется в направлении использования XML для конфигурации.

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

Что касается налога на угловые скобки - я не беспокоюсь об этом слишком часто, поскольку библиотеки XML заботятся о его абстрагировании. Единственный случай, когда это может стать поводом для беспокойства, - это если у вас очень мало места для хранения данных и каждый байт на счету.

[1] Пространство имен System.Configuration - http://msdn.microsoft.com/en-us/library/system.configuration.aspx

[2] Использование файлов конфигурации приложений в .NET - http://www.developer.com/net/net/article.php/3396111

0
0
 dlinsin
dlinsin
15-го августа 2008 в 12:32
2008-08-15T12:32:36+00:00
Дополнительно
Источник
Редактировать
#8415794

Мы используем файлы свойства, просто потому, что Java поддерживает их изначально. Пару месяцев назад я увидел, что платформа приложений SpringSource использует JSON, чтобы настроить свои сервера, и это выглядит очень интересно. Я сравнил различные обозначения конфигурации]1 и пришли к выводу, что XML-видимому, лучше всего подходят в данный момент. У него есть хорошие инструменты поддержки и достаточно независимым от платформы.

0
0
 Herms
Herms
15-го августа 2008 в 1:18
2008-08-15T13:18:51+00:00
Дополнительно
Источник
Редактировать
#8415796

Ре: epatel'ы комментарий

Я думаю, что исходный вопрос был просьбой о конфигурации приложения, что админ будет делать, а не просто сохранение предпочтений пользователя. Предложения, которые вы дали, кажется, больше для пользователей, чем префов конфигурации приложения, и они'т, как правило, то, что пользователь будет когда-либо иметь дело с напрямую (приложение должно обеспечивать параметры конфигурации в пользовательском интерфейсе, а затем обновить файлы). Я действительно надеюсь, что вы'd никогда не сделать пользователь для просмотра/редактирования реестра. :)

Что же касается собственно вопрос, Я'd не сказать, XML-это, наверное, хорошо, как много людей будут использованы для использования, что для конфигурации. Как долго, как вы организуете значения конфигурации в простой в использовании образом, затем в "угол налоговый кронштейн" не должны'т быть слишком плохо.

0
0
Анонимный пользователь
15-го августа 2008 в 3:23
2008-08-15T15:23:52+00:00
Дополнительно
Источник
Редактировать
#8415803

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

0
0
 epatel
epatel
15-го августа 2008 в 11:27
2008-08-15T11:27:09+00:00
Дополнительно
Источник
Редактировать
#8415791

На какой платформе вы работаете? Я'бы рекомендовал попробовать использовать предпочтительный/обычный метод для нее.

  1. MacOSX - plists
  2. Win32 - Registry (или новый, давно на нем не разрабатывал)
  3. Linux/Unix - ~/.apprc (возможно, имя-значение)
-3
0
Похожие сообщества 11
pro.jvm
pro.jvm
5 814 пользователей
Сообщество разработчиков Java Scala Kotlin Groovy Clojure Чат для нач-их: @javastart Наш канал: @proJVM Вакансии: @jvmjobs @jvmjobschat ⚠️ Оффтоп -> @flood ❌Переход на личности ❌Троллинг ❌Реклама ❌HH (вакансии) ❌Варез
Открыть telegram
learn.java
learn.java
5 375 пользователей
Чат для начинающих и не только Статистика: https://combot.org/chat/-1001083535868 Основной чат - @jvmchat
Открыть telegram
Java & Co
Java & Co
4 434 пользователей
Можно обсуждать с матом и без всё, что касается жабы, вплоть до холиваров. НЕ ИМЕЕТ ОТНОШЕНИЯ К САЙТУ JAVARUSH.RU ПРАВИЛА - https://t.me/javarush/179171 Вакансии сюда - https://telegram.me/joinchat/B7IzvUCnfo6d8t3yIxKguQ По вопросам - @thedude
Открыть telegram
pro.JVM Jobs Chat
pro.JVM Jobs Chat
2 564 пользователей
Чат для обсуждения вакансий на JVM языках. Правила: - Никакого спама - Никакого троллинга и оскорблений участников - Размещение вакансий только через канал Канал для вакансий: @jvmjobs Основной чат: @jvmchat Наши друзья: @scala_jobs, @scala_jobs_feed
Открыть telegram
Java/Kotlin and more
Java/Kotlin and more
2 063 пользователей
чат о Java/Kotlin и связанных технологиях. We're discussing: job, tech questions etc. languages: russian, java, eng, kotlin Ссылка на чат: t.me/springframeworkio
Открыть telegram
Java Underground
Java Underground
1 751 пользователей
Библиотека по Java https://t.me/javalib Наше сообщество ВК: https://vk.com/javatutorial Вакансии и резюме свои строго в этот канал: https://t.me/job_java
Открыть telegram
Добавить вопрос
Категории
Все
Технологий
Культура / Отдых
Жизнь / Искусство
Наука
Профессии
Бизнес
Пользователи
Все
Новые
Популярные
1
Ilya Smirnov
Зарегистрирован 6 дней назад
2
Денис Васьков
Зарегистрирован 1 неделю назад
3
Dima Patrushev
Зарегистрирован 1 неделю назад
4
sirojidddin otaboyev
Зарегистрирован 2 недели назад
5
Елена Гайдамамакинат
Зарегистрирован 2 недели назад
ID
KO
RU
© kzen.dev 2023
Источник
stackoverflow.com
под лицензией cc by-sa 3.0 с атрибуцией