Аргументы метода службы, идентификаторы объектов и ссылки на объекты - PullRequest
0 голосов
/ 22 апреля 2020

Я понимаю, что, вероятно, лучше передавать объекты в метод службы, но так ли это, если вызывающая сторона должна сначала найти объект перед вызовом службы? И если да, то почему?

Пример

Допустим, у меня есть RoleService, который добавляет роль данному пользователю. И скажем, RoleService вызывается через веб-контроллер или, возможно, REST API. Веб-контроллер использует userId и roleId в качестве входных данных веб-запроса.

Будет ли лучше использовать этот сервисный метод?

public void addRoleToUser(long userId, long roleId) {
    User user = userRepository.find(userId);
    Role role = userRepository.find(roleId);
    user.addRole(role);
}

Или этот? В этом случае веб-контроллеру, очевидно, потребуется извлечь оба объекта перед вызовом службы.

1 Ответ

1 голос
/ 22 апреля 2020

При вызове через веб-контроллер или REST API входящий запрос будет давать только 2 идентификатора, поэтому вам нужно где-то делать find() вызовы.

Вы, конечно, не можете доверять вызывающему иметь актуальную информацию о двух объектах, и передавать полные объекты бесполезно, если вы все равно собираетесь использовать идентификаторы.

Обычно сервисный API также является граница транзакции базы данных (класс обслуживания или метод, помеченный @Transactional), поэтому лучше всего, чтобы метод службы выполнял вызовы find() и addRole(), чтобы они все выполнялись в одной транзакции базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...