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