2014-01-19 4 views
-1

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

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

Зачем использовать ДОЗИНЫ языков вместо использования какого-то одного?

Например, Java.

Он может определять или объявлять иерархию любого типа, настраивать таблицы и т. Д.

Так почему бы нам не использовать java-файлы для хранения всех вещей?

Например, один может предоставить файл настроек в формате Java, как это:

class Properties { 

    String dbpassword = "password"; 

    String database = "localhost"; 

    String dbuser = "mkyong"; 

} 

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

Итак, почему бы нам не сделать это?

Единственная причина, которая приходит в виду, это безопасность.

Внешний файл может содержать не только свойства, но и некоторый код конструктора, который может взломать приложение или свернуть его.

So. Есть ли защита для этого случая? Можем ли мы ограничить возможную функциональность скомпилированных файлов во время выполнения?

UPDATE

Я не имею в виду именно Java. Java - всего лишь образец. Мне нужны способы использования единого языка.

UPDATE 2

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

Предположим, что в шаблоне MVC мы будем использовать три отдельных языка для модели, вида и контроллера! Это было бы чушь! Мы используем один язык. Я имею в виду, что мы используем разные языки, но каждый программист использует один единственный язык, все еще разделяющий MVC. Вот какие файлы конфигурации: разделение еще одной концепции. Нет смысла использовать разные языки только потому, что концепция разделена.

Это относится также к HTML/JavaScript/CSS. Нет смысла иметь три языка. Нет никакого проклятого чувства!

Конечно, я понимаю исторические причины и т. Д. Но это не смысл, это просто досадные причины.

Итак, почему же мы видим новые и новые проекты с одинаковой природой?

Почему MS создала XAML для WPF? Они сделали новый свежий язык C#, почему бы и не поместить в него XAML?

Почему Oracle создал FXML для JavaFX? Слава богу, они отказались от скрипта JavaFX! Потому что они хотели иметь три языка только для RIA!

+3

Просто, поскольку существуют системы/приложения/фреймворки, которые не основаны на Java ?! Попросите разработчика VB6 включить Java-код - надеюсь, вы знаете, что я имею в виду. –

+1

JSON был бы лучшим выбором для ваших проблем. Но даже тогда программисты Lisp и Scheme все равно покажут головами ... – Ned

+0

@NedNowotny уже существует [черновик-версия для json-schema] (http://json-schema.org/), но это имеет свои пределы, такие как отсутствие объектно-ориентированного наследования. Вы можете обойти это с помощью «включения» 'allOf' определения (например, fe-сообщения), но вы не можете переопределить что-то, что определено там, - проверенное json-сообщение должно выдержать как проверки проверки, так и исходную json-схему и упомянутый. Если, однако, упомянутое относится к чему-то вроде «addidionalProperties»: проверка false будет с высокой вероятностью ошибки для расширенных параметров. –

ответ

2

Комментарии определили одно из возможных объяснений:

Java, синтаксис будет трудно иметь дело с других языков.

... хотя для свойств конфигурации программы Java это кажется немного растянутым. (Почему вы читали свойства конфигурации Java-программы из не-Java-программы?)

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

  • Лицо, записывающее конфиги, должно понимать синтаксис Java.

  • Если они ошибаются, приложение должно иметь дело с ошибкой компиляции Java в середине запуска приложения.

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


Теперь возможно XML не является лучшим выбором для файлов конфигурации. В эти дни я бы предпочел классический синтаксис файла «Свойства» или JSON.

Но это XML в порядке, если вы это сделаете правильный путь. Например:

  • Если вы используете/XML связывание библиотеки Java (например, JAXB) вам не нужно писать XML-парсер, или кучу угловатых DOM-прогулку код, чтобы выбрать информацию из дерева разбора ,

  • Вы можете использовать редактор, управляемый DTD или XML-схемой, чтобы пользователю не нужно было писать (или даже видеть) необработанные XML-файлы.

  • Если ваши конфиги являются действительно сложным, вы могли бы использовать что-то вроде EMF моделировать их, а затем генерировать ОТД/Schemas и весь код Java для библиотек конфигурации аксессоры и настраиваемые конфигурации редакторов конкретных приложений.


Для записи, подход, который вы предложили обычно используется в языках сценариев, таких как Perl, Ruby, Python и даже «ш». Это просто, что он имеет тенденцию быть проблематичным в статически скомпилированных языках.


Re вашего катамнестического "Почему XXX сделать YYY" вопросы:

  1. я не знаю. Меня не было в комнате.
  2. Мое мнение было бы чисто спекуляцией.
  3. Это не имеет значения почему они все равно сделали.

И в ответ на ваш общий комментарий «это не имеет смысла», ИТ-мир изобилует прагматичными компромиссами/неуклюжими решениями. Жаловаться на это ничего не получается. Если вы хотите что-то добиться, попробуйте свой путь, и покажут нам доказательства, что он действительно работает на Java.

+0

Ваши три причины, применимые к любому языку, включая 'XML' и' JSON' (человек должен знать JSON/XML, человек может ошибаться и набирать с ошибочным файлом, для доступа к JSON/XML требуется писать синтаксический код). –

+1

@SuzanCioc - По моему мнению, 1) вы ничего не получили, и 2) есть * лучшие * способы обработки XML, которые * не включают * эти вещи. –

+0

Я предполагаю, что если есть все-единственное решение для всего, что мы, очевидно, уже будем использовать, но поскольку это не так, нам придется согласовать некоторые стандарты IIOP, чтобы обеспечить связь с разными или даже устаревшими системами. И вы не можете обязывать всех соглашаться на один и тот же стандарт - более того, некоторые всегда будут интерпретировать его по-другому или попытаться доминировать в процессе разработки с их «концепциями» того, что всем понадобится («640 kb достаточно для any "') –

0

Использование исполняемого кода для конфигурации - это рецепт катастрофы. Рассмотрите:

class Properties 
{ 
    String dbpassword = "password"; 
    String database = "localhost"; 
    String dbuser = "mkyong"; 

    static 
    { 
     File userDir = new File("c:\\users\\mkyong"); 
     userDir.delete(); 
     //etc... 
    } 
} 

Вы можете попытаться противостоять этому, используя диспетчера безопасности для ограничения ущерба, но они не идеальны. Или вы можете написать свой собственный синтаксический анализатор, который принимает только подмножество того, что может сделать полная программа Java (ограниченный API, без API и т. Д., Аналогичный JSON и полный Javascript). Но в конце концов, синтаксис Java лучше, чем другие форматы конфигурационных файлов?

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