Мой вопрос состоит в том, что то, что является основной целью DTO?
Как расширения (Data Transfer Object) подразумевает, DTOS предназначены для передачи структурированных данных в различных уровнях. DTO позволяют отделять конкретные реализации протокола, которые представляют данные, так что данные из разных источников могут быть абстрагированы до общения на разных уровнях.
Например, DTOs позволят вам отделить данные, присутствующие в объекте HttpServletRequest, от его внутренней памяти, чтобы вы могли отправлять данные службе на уровне бизнес-логики. То же самое относится к DTO, используемым для абстрагирования результатов, полученных из SQL-запроса и находящихся в объекте ResultSet. Короче говоря, DTO позволяют передавать данные, не помещая их в исходный код - вы можете забыть об ответах HTTP и соединениях JDBC во время работы с данными.
Могу ли я использовать DTO, чтобы сопоставить нашу реляционную таблицу базы данных или я должен пойти с «Bean»?
Вы можете принять второй подход к использованию Beans. Фактически, с JPA вы вообще не требуете своих DTO. Управляемые баны JPA сами представляют данные в разных таблицах и могут быть де-связаны из состояния базы данных, чтобы вы могли использовать их для передачи данных.
Если я использовать DTO в период между слоями, то как может я представлять таблицу базы данных в объекта, потому что DTO среди слоев могут содержать свойства, которые не связаны с таблицей базы данных.
Это зависит от того, как вы хотите соединить DTO с таблицей базы данных. Предпочтительно иметь взаимно однозначное сопоставление между DTO и таблицей базы данных и выбирать другой DTO для передачи свойств, не связанных с таблицей. В конце концов, DTO, как и любой другой объект, должны нести единую ответственность. Если ответственность заключается в отражении таблицы базы данных, тогда она должна содержать другие «нерелевантные» свойства.
Чтобы расширить рекомендации по использованию JPA в этом контексте, плохой дизайн имеет несвязанные атрибуты в сущности JPA, особенно если этот несвязанный атрибут должен быть помечен как переходный и не добавляет никакого значения в поведение объекта.
Чтобы быть педантичным, теперь это JEE. «2» был сброшен много лет назад, как будто раньше была Java 2, которая сегодня просто Java. –