В большинстве моих предыдущих проектов у меня есть две доменные модели, одна с аннотациями JAXB, а другая с аннотациями JPA.Я знаю, что они могут быть объединены в одну модель с обоими аннотациями в одном классе, но по моему опыту компромиссы с этим подходом всегда приходили к выводу, что их нужно разделять.Другим преимуществом отдельного подхода является возможность создавать классы JAXB с XSD и легко связывать их в XSD из других проектов.
В большинстве случаев мне нужны фабричные классы, позволяющие гибко создавать представления JAXB моих сущностей.Например,
public class UserFactory
{
public UserFactory(User queryUser, String lang)
{
this.queryUser=queryUser;
this.lang=lang;
}
public JaxbUser getUser(JpaUser jpaUser)
{
JaxbUser jaxbUser = new JaxbUser();
if(queryUser.isSetId()){jaxbUser.setId(jpaUser.getId());}
if(queryUser.isSetEmail()){jaxbUser.setEmail(jpaUser.getEmail());}
if(queryUser.isSetRoles())
{
RolesFactory f = new RolesFactory(queryUser.getRoles(),lang);
jaxbUser.setRoles(f.getRoles(jpaUser.getRoles()));
}
return jaxbUser;
}
}
Я создаю UserFactory с отдельным шаблоном queryUser
и желаемым lang
для объектов, поддерживающих разные языки.Шаблон проверяется при создании результата для определенных полей или дополнительных фабрик, и результирующий объект создается.Запрос определяется в XML-файле следующим образом:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<query lang="en">
<user id="1">
<roles>
<role code="code"/>
</roles>
</user>
</query>
Благодаря этой методологии у меня есть мощный и гибкий инструмент для создания настраиваемого XML, несмотря на все недостатки поддержки двух моделей предметной области и фабричных классов.Я знаю, что есть много доступных фреймворков или библиотек, о которых я никогда не слышал, поэтому вот мой вопрос:
Есть ли что-то похожее на мой подход?