Персистентные сущности как объекты передачи данных - PullRequest
5 голосов
/ 03 октября 2010

У меня есть некоторые персистентные Java-объекты со всеми аннотациями @ в моем веб-приложении. Все эти объекты находятся в слое данных. Рекомендуется ли использовать эти постоянные объекты в качестве объектов передачи данных?

Например, если я хочу передать обратно данные, извлеченные из хранилища данных, должен ли я непосредственно возвращать эти персистентные объекты или я должен вручную скопировать данные в промежуточный DTO и передать их обратно на другие слои? Какой подход вы бы предложили?

Ответы [ 3 ]

1 голос
/ 03 октября 2010

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

Если вам нужно хранить эти объекты в нескольких сеансах / запросах, это имеет смысл.

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

1 голос
/ 03 октября 2010

Я бы сказал, что это нормально (на самом деле основным преимуществом этих ORM было использование этих доменных объектов в разных слоях без ненужных DTO), если вы следуете следующим рекомендациям:

  1. Вы не расширяете границы сеанса, т. Е. Любые изменения, связанные с базой данных, всегда должны выполняться с использованием определенного вами уровня доступа к данным, а не через эти переданные объекты в других слоях.
  2. Любые данные, которыевам нужно, чтобы в других объектах (слоях выше уровня доступа к данным, таких как уровень бизнес-логики и уровень представления) предварительно заполнялись эти объекты, в противном случае вы получите исключения в соответствии с поведением ORM.
  3. Не расширяйте сеансграницы для решения вопроса, указанного в п. 2
0 голосов
/ 03 октября 2010

Мне никогда не требовался дополнительный уровень абстракции, обеспечиваемый путем копирования экземпляра постоянства в другой класс DTO.

...