Шаблоны проектирования: следует ли перемещать повторяющиеся вызовы функций в разные модули в их собственную "абстракцию"?
Как разработчик JS я часто сталкиваюсь с проблемой, нужно ли переносить определенные "процедуры" на свой собственный уровень. Например:
const localStorageUser = jwtService.userExistsInStorage();//Returns a user object if available
if (localStorageUser) {//If so, "login" from it
// debugger;
store.dispatch(userActions.setUserData(localStorageUser))//Set the user object in the Redux store.
AjaxService.setHeader('token', localStorageUser.data.token);//Set the token header for every ajax request.
if (localStorageUser.data.shortcuts) {
store.dispatch(navigationActions.setNavigation(localStorageUser.data.shortcuts));
} else {
store.dispatch(navigationActions.resetNavigation());
}
}
Это код из файла верхнего уровня в приложении React. Как видите, он вызывает различные функции при инициализации, когда приложение загружается.
Допустим, однажды я могу обнаружить, что повторяю этот код в другой части приложения (автоматический повторный вход в систему). Разве такой код "принято" помещать в отдельный класс? Я имею в виду, что это полностью нарушит принцип единой ответственности, поскольку этот класс / модуль будет сильно связан со многими другими классами и обязанностями.
Это всего лишь один пример (возможно, не лучший), но эта дилемма возникает часто. Как опытные разработчики подходят к этому вопросу?
1 ответ
Аббревиатура СУХОЙ - не повторяйся - все сказано. И извлечение кода идеально соответствует принципу единой ответственности, поскольку новый класс будет отвечать только за одну вещь, за процесс входа в систему, и у него будет только одна причина для изменения, а именно, если процесс входа в систему изменится. Все другие объекты, использующие компонент входа в систему, не будут заботиться (если API не изменится), что вы хотите. Сопряжение создает проблему, если вам нужно изменить API вашего компонента, поэтому всегда старайтесь создавать понятные и стабильные API.