Спящие аннотации и DTO - PullRequest
1 голос
/ 09 ноября 2011

У меня есть вопрос об использовании аннотаций Hibernate и шаблона DAO.Предполагается, что DTO будет представлять сущности модели данных.DAO - это интерфейсы, которые определяют операции над этими DTO.Реализации DAO - это классы, которые реализуют интерфейсы DAO и реализуют операции, определенные этими интерфейсами (например, с использованием Hibernate / MySQL).Мой вопрос: как я могу использовать аннотации Hibernate в этом случае?Если я аннотирую непосредственно DTO, я соединяю мой DTO с Hibernate Framework, что, я думаю, является плохой практикой.

Может быть, это простой вопрос, но проблема интересная.

Спасибо

Ответы [ 4 ]

1 голос
/ 09 ноября 2011

Когда вы используете аннотации из пакета javax.persistence, вы НЕ связываете свой код с Hibernate (однако вы бы это делали при использовании аннотаций org.hibernate, поскольку они основаны на сторонних библиотеках).

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

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

1 голос
/ 09 ноября 2011

Это вопрос или предполагаемая «независимость» от простоты использования. Либо вы решите использовать Hibernate, либо другой движок JPA, и вам действительно нужно иметь аннотации к вашим сущностям и иметь файлы jiber hibernate в вашем пути к классам для их использования. Или вы решили быть полностью независимым от JPA / Hibernate, но вы должны реализовать всю настойчивость самостоятельно.

Мое мнение таково, что жертвовать простотой использования и повышением производительности, предлагаемыми JPA только для того, чтобы избежать некоторых пробелов в пути к классам, - плохой выбор. Но YMMV.

0 голосов
/ 10 ноября 2011

Из Википедии:

В традиционной архитектуре EJB (Enterprise JavaBeans) DTO служат двойным целям: во-первых, они решают проблему, заключающуюся в том, что бины сущностей до ejb 3.0 не сериализуются; во-вторых, они неявно определяют фазу сборки, где все данные, которые будут использоваться представлением, извлекаются и направляются в DTO перед возвратом управления на уровень представления. Третья причина использования DTO может заключаться в том, что определенные уровни приложения не должны иметь доступа к базовым объектам доступа к данным и, следовательно, изменять данные.

Таким образом, DTO - это объекты, которые создаются из сущностей и используются уровнем представления (JSP, например, должен обращаться к DTO, а не к сущностям напрямую). Таким образом, вы должны аннотировать не DTO-ы, а ваши классы сущностей, а затем предоставить код для перевода сущностей в DTO-ы.

0 голосов
/ 09 ноября 2011

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

...