Насколько мне известно, методы сервиса должны принимать и возвращать DTO. Получается, что в контроллере при вызове методов из сервиса иногда мне приходится писать что-то вроде примеров 1,2
messageService.findByRoomAndUser(RoomDTO.forId(16),UserDTO.forId(10));//1
messageService.findByRoomAndUser(roomDTO,userDTO);//2
messageService.findByRoomAndUser(16,10);//3
messageService.findByRoomAndUser(roomDTO.getId(),userDTO.getId());//4
В 1 примере сложнее перепутать местами параметры, что плюс. Стоит ли создавать новые обьекты как в примере 1 чтобы не писать код вроде:
MessageDTO findByRoomAndUser(RoomDTO room, UserDTO user) {
return findByRoomAndUser(room.getId(),user.getId());
}
MessageDTO findByRoomAndUser(Long roomId, Long userId) {
//код функции
}
Или все-же делать методы, которым нужен только идентификатор, согласно примеру 3, а при их вызове для объектов использовать getId() ?
Я бы на вашем месте сделал разделение:
1. RoomDTO findByRoom(id) и
2. UserDTO findByUser(id),
а после найденных RoomDTO и UserDTO передать, например, в конструктор -
return new MessageDTO(room, user)
Сборка персонального компьютера от Artline: умный выбор для современных пользователей