вызов метода со значением, присвоение этого значения переменной, передача этой переменной в другой метод и присвоение результата другой переменной ... и так далее, пока у вас не будет требуемого значения, которое требуется для перемещения программы.исполнение на.
Это совершенно нормально.Вы строите большую функцию из множества маленьких функций - именно так, как вы должны делать это в функциональном программировании.Переменные просто необходимы для подключения.
То, что вы показали, это не массивный, сложный зверь, это очень ясный и чистый код.При желании легко протестировать все отдельные маленькие функции самостоятельно.
И поскольку все эти функции чистые и ваши переменные неизменны, ваш код очень просто реорганизовать из
const { search, hash } = window.location // get search / hash from url
const { id_token, access_token } = queryParams(search || hash)
const isSessionValid = validateSession(id_token) // check exp time etc
if (isSessionValid) {
store('id_token', id_token)
store('access_token', access_token)
window.history.replaceState(null, null, window.location.pathname)
}
до
function getSession({search, hash}) {
const { id_token, access_token } = queryParams(search || hash)
return {
id_token,
access_token,
isSessionValid: validateSession(id_token)
};
}
const { id_token, access_token, isSessionValid } = getSession(window.location);
if (isSessionValid) {
store('id_token', id_token)
store('access_token', access_token)
window.history.replaceState(null, null, window.location.pathname)
}
, но если вы не можете использовать getSession
в нескольких местах или вам нужен этот уровень абстракции для организации кода, рефакторинг не нужен.
как можноэто будет рефакторинг для использования композиции функций?
Это не может на самом деле.Композиция функций работает только тогда, когда результат одной функции передается в другую функцию и нигде больше.Но в вашем коде access_token
и id_token
используются в нескольких местах.Хотя это можно выразить в pointfree style , оно сложное, медленное и слишком абстрактное.Переменные здесь намного проще в использовании.
Я часто вижу этот шаблон в кодовой базе, над которой я работаю
Что такое шаблон?Всякий раз, когда вы видите дублированный код, вы можете абстрагироваться от общих частей.Но вам нужно оценить, сколько общих частей и сколько отдельных частей есть в блоках кода.Хотя всегда возможно, часто это того не стоит.