Привязка Java против определения классов вручную - PullRequest
5 голосов
/ 04 ноября 2008

У меня есть схема XML, для которой мне нужно будет создать классы Java. Это не очень большая схема, я бы сказал, что в результате будет около 20 классов. Я пытаюсь понять, использовать ли программу автоматического связывания (например, ту, которая поставляется в JAXB или JiBX) или же вручную писать свои собственные классы и использовать что-то вроде XStream для маршаллинга / демаршаллинга.

Каковы преимущества / недостатки написания ваших собственных классов по сравнению с использованием обязательной программы.

Кроме того, одна из тех, что я использую для связывания, связана с этим навсегда. Например, если я использую компилятор связывания JAXB для создания классов, должен ли я использовать JAXB для всего маршаллинга / демаршаллинга?

p.s. Я видел следующие вопросы о связывании / сериализации XML, которые были полезны, но не дали полного ответа на мой вопрос: xml-serialization-in-java и java-xml-binding

Ответы [ 2 ]

14 голосов
/ 04 ноября 2008

Не думаю, что на ваш вопрос есть однозначный ответ. Но я могу дать вам несколько нелегких советов. Вот некоторые вещи для рассмотрения:

  1. Требуется много времени для написания кода маршалинга и деинсталляции, особенно в первый раз.

  2. Вам придется потратить немало времени на изучение нюансов вашей библиотеки DOM (Xerces или ее эквивалента).

  3. Существует много дубликатов, поэтому в конечном итоге вы будете вынуждены написать несколько вспомогательных классов.

  4. Вам потребуется множество модульных тестов, чтобы убедиться, что вы охватили все свои базы в области необязательных элементов и атрибутов.

Глядя на этот список, довольно легко сказать: «Это то, что JAXB делает для меня». Проделав это на протяжении нескольких лет, я бы сказал, что JAXB экономит вам немало времени и усилий, особенно последняя итерация JAXB в Java 5/6.

Но если вы пойдете с JAXB, есть один урок, который мы усвоили на своем нелегком пути:

*** Не позволяйте сгенерированным JAXB классам просачиваться в ваше приложение.

Как вы сказали в своем вопросе, это связывает все ваше приложение с тем, как JAXB работает. Если JAXB придется заменить (есть ряд причин, по которым вы могли бы сделать это в будущем), тогда вы столкнетесь с трудной и болезненной задачей (поверьте мне, мы сделали это, и мы никогда не будем заниматься этим положение снова).

Теперь мы всегда скрываем сгенерированные JAXB классы за фасадом или фабрикой, сопоставляя классы JAXB с нашими POJO-доменами с требуемым поведением. Мы думаем о JAXB так же, как и JDBC; JAXB - это просто еще один источник данных, еще один способ получения данных в POJO нашего домена. Доменные POJO являются секретным соусом, и мы контролируем, как они кодируются и как они используются. JAXB - это просто инструмент для маршалинга и демаршаллинга.

0 голосов
/ 04 ноября 2008

Я не хочу начинать долгую и бесконечную войну падубов по этому вопросу, но из моего опыта - можете ли вы использовать инструмент, который генерирует весь код для вас и не требует JAR-надежности. Код, который будет сгенерирован, будет уродливым, но будет работать до тех пор, пока вы не обнаружите необходимость вручную писать рукописный код. В большинстве случаев вам не нужно это делать. Извините, я не могу дать мгновенную рекомендацию о том, какой инструмент использовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...