Неоправданно обширные зависимости
Иногда компоненты зависят от большей информации, чем им нужно для работы. Например, представьте компонент логина в веб-приложении. Этому компоненту нужны только логин и пароль, и он вернет объект пользователя, если найдет такового.
Интерфейс может выглядеть так:
public class LoginManager{
public User login(HttpServletRequest request){
String user = request.getParameter("user");
String password = request.getParameter("password");
//read user and return it.
}
}
Вызов компонента мог бы выглядеть так:
LoginManager loginManager = new LoginManager();
User user = loginManager.login(request);
Выглядит просто, не так ли? И даже если методу логина потребуется больше параметров, не нужно будет изменять вызывающий код (это собственно и причина создания неоправданно обширной зависимости).
Но сейчас метод логина имеет то, что я называю «неоправданно обширные зависимости» от интерфейса HttpServletRequest. Метод зависит от большего, чем ему требуется для работы. oginManager требует только имя пользователя и пароль, чтобы найти пользователя, но получает HttpServletRequest как параметр в методе логина. HttpServletRequest содержит гораздо больше информации, чем нужно LoginManager.
Зависимость от интерфейса HttpServletRequest вызывает две проблемы:
-
LoginManager не может быть переиспользован без объекта HttpServletRequest. Это может сделать труднее юнит-тестирование LoginManager. Вам нужно будет замокать объект HttpServletRequest, что требует большой работы.
-
LoginManager требует, чтобы названия параметров пользовательского имени и пароля были «логин» и «пароль». Это также необязательная зависимость.
Намного лучший интерфейс для метода логина LoginManager будет:
public User login(String user, String password){
//read user and return it.
}
Но посмотрите, что случится с вызывающим кодом теперь:
LoginManager loginManager = new LoginManager();
User user = loginManager.login(
request.getParameter("user"),
request.getParameter("password"));
Он стал более сложным.
Внимание! Вот причина, по которой разработчики создают неоправданно широкие зависимости. Чтобы упростить вызывающий код.
Постарайтесь избегать неоправданно широких зависимостей. Держите в уме, что неоправданно широкие зависимости возникают тогда, когда вы группируете множество параметров в класс. Это общий рефакторинг, который проводится, чтобы сделать код более простым, но как вы можете видеть, может вести к неоправданно широким зависимостям.
Источник: https://habr.com/ru/post/349836/