Должны ли DTO содержать встроенные объекты или я должен возвращать «плоские» DTO, которые имеют только идентификаторы? - PullRequest
0 голосов
/ 27 сентября 2019

В прошлом мои DTO были прямой картой сущности.Однако сейчас я нахожусь в сценарии, где все, что нам действительно нужно, это идентификатор вложенного объекта, чтобы мы могли затем выполнить поиск в БД, если это необходимо.Это выглядит примерно так

public class UserDto {
    Integer id;
    String name;
    List<Integer> groupIds;
}

Но сущность выглядит так

public class UserEntity {
    Integer id;
    String name;
    List<UserGroupEntity> userGroups;    
}

Это обычная практика?Должен ли я просто отобразить DTO непосредственно из объекта и включить DTO UserGroup?

1 Ответ

1 голос
/ 27 сентября 2019

Я обычно использую вариант номер один, включая ids других объектов.В противном случае DTO может через некоторое время стать довольно раздутым, что приведет к большому количеству ненужных поисков в базе данных.

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


Когда речь идет о разработке конечной точки API (при условии, чтовы выбираете первый вариант) вы можете позволить клиенту получать User s и UserGroup s, вызывая следующие конечные точки:

/users/:id
/users/:id/usergroups

Это так, чтобы клиент не должен былдождитесь окончания извлечения User, прежде чем извлекать UserGroup s.Это следует принципам RESTful и может, например, выполняться параллельно с клиентом.

...