Я не думаю, что это нарушение закона Деметры.Это было бы нарушением, если бы вы передавали какой-то объект, извлекали из него userId и использовали только ID пользователя.
Вот пример, который был бы нарушением:
public class UserVoteServiceImpl implements UserVoteService {
@Autowired UserRepository userRepository;
public static int getUserScore(SomeWrapper someWrapper) {
return userRepository.findUserById(someWrapper.getUserId()).getScore();
}
}
Но нет ничего плохого в делегировании работы в реализации вашего метода, и нет ничего плохого в выполнении вызова возвращаемого объектаиз хранилища.
(Лично я не в восторге от использования сервисов, чтобы обернуть отдельные вызовы дао, но это другая проблема.)
В настоящее время я работаю над базой кода, созданной людьми, которые, очевидно, никогда не слышалиLoD, полный таких вещей, как
public Thing getThing(Integer id) {
return new Beta().getGamma().getDelta().getEpsilon().getOmega().getThing(id);
}
, и изначально я думал, что ваш пример не поднимется до того же уровня патологии, что и этот.Но после прочтения этого сообщения в блоге, где я и получил приведенный выше пример, конечно, , я думаю, что я бы порекомендовал вам изменить свой метод на
public class UserVoteServiceImpl implements UserVoteService {
@Autowired UserRepository userRepository;
public User getUser(Long userId) {
return userRepository.findUserById(userId);
}
}
и позволить вызывающей стороне тянутьОценка пользователя.Это изменение также имеет преимущество, заключающееся в том, что интерфейс приложения имеет дело с объектами домена, а не с примитивами.