Я пытаюсь создать приложение для управления проектами, и для моего бэкэнда у меня есть объект проекта, который имеет отношения «многие ко многим» с объектом пользователя. У меня есть следующий DTO:
public class ProjectDto implements Serializable {
private final Long id;
private final String name;
private final String description;
private final Date createdAt;
private final Date updatedAt;
private final Set<UserDto> users;
}
И в моем ProjectService я хочу иметь метод, который создает проект, которому назначены все отправленные пользователи. Однако мой вопрос заключается в том, должен ли мой интерфейс отправлять на мой сервер набор пользовательских объектов или лучше отправить набор идентификаторов пользователей, которых я хочу назначить этому проекту? Не лучше ли вернуть этот DTO при создании проекта и иметь другой DTO с набором идентификаторов пользователей, когда я хочу создать проект?
Вы не можете доверять данным из внешнего интерфейса, и вам необходимо применить проверки для тела запроса, включить Set<UserDto> users
, а для проверки users
вы должны получить из БД (или других источников).
И использование Set<?> userIds
также необходимо для извлечения из БД, но вам не нужно добавлять дополнительный код для проверки DTO, а проверка идентификаторов более проста и удобна в обслуживании. Использование userIds
также позволяет убедиться, что users
, для которого установлено значение project
, являются объектами, извлеченными из БД. Это также упрощает код FE (я надеюсь), поскольку не нужно создавать объект (DTO).