Size: a a a

NodeUA - JavaScript and Node.js in Ukraine

2020 March 29

IK

Igor Kazmin in NodeUA - JavaScript and Node.js in Ukraine
остается вопрос валидации контракта, для того что бы не получить неконтролируемые ошибки
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
Timur Shemsedinov
определение правильное, а интерпретация - нет, req и res - это средоточие состояния, это как глобал, ни чем не лучше. в общем, у вас был проект, написанный полностью на функциях с побочными эффектами
если req заморожен намертво откуда в нем состояние? res согласна что кто-то может туда класть что попало но res не передавался этим функциям
источник

К

Кай in NodeUA - JavaScript and Node.js in Ukraine
Якщо функції приймають частину req (body/prarms/query etc.) і жодним чином не модифікують res то проблем не має бути в принципі.
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
если req заморожен намертво откуда в нем состояние? res согласна что кто-то может туда класть что попало но res не передавался этим функциям
const state = { fucking: 'state' };

const pureFunction = state => {
 state.fucking = 'pure';
 return state.fucking.length;
};

console.log(pureFunction(state));
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
отличные чистые функции, чего
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
никто так не делал мы ж не дурные
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
req не заморожен
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
и что, req передавался, а res не передавался?
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
res.end('fucking state') - тоже мутирует внешний стейт
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
function handle(req, res) {
    const data = Object.freeze(req.body)
    res.send(transform(data));
}
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
через req можно мутировать прекрасно
  const body = [];
 req.on('data', chunk => {
   body.push(chunk);
 }).on('end', async () => {
   const data = body.join('');
   const args = JSON.parse(data);
   resolve(args);
 });
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
transform - под капотом вызывает много других функций которые трансформируют эти данные. req и res используются только в одной входной функции
источник

IK

Igor Kazmin in NodeUA - JavaScript and Node.js in Ukraine
думаю отошли от темы вопроса
DI - можно реализовать и на функциях, его цель понизить связанность кода, вопрос реализации - отдельный вопрос
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
да, мне просто показалось что ради DI начинают делать все-все классами и добавлять состояние
источник

IK

Igor Kazmin in NodeUA - JavaScript and Node.js in Ukraine
зависит от майнд сета, как по мне + где начитаются примеров )
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
function handle(req, res) {
    const data = Object.freeze(req.body)
    res.send(transform(data));
}
const state = Object.freeze({ fucking: { pure: 'state' } });

const pureFunction = state => {
 state.fucking.pure = 'pure';
 console.log(state);
 return state.fucking.pure.length;
};

console.log(pureFunction(state));
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
я знаю что там не deep freeze. во-первых рекурсивно замораживали во-вторых еще и в тестах перепроверяли (хотя зачем) что входные данные не меняются.
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
у меня в целом вопрос - если программа/проект хорошо пишется в функциональном стиле - туда, получается, не нужно DI тащить? все передается на вход функций и выходит на выход
источник

ES

Elena Sharovar in NodeUA - JavaScript and Node.js in Ukraine
то что класс это тоже функция я помню ))
источник

TS

Timur Shemsedinov in NodeUA - JavaScript and Node.js in Ukraine
Elena Sharovar
я знаю что там не deep freeze. во-первых рекурсивно замораживали во-вторых еще и в тестах перепроверяли (хотя зачем) что входные данные не меняются.
кроме того, мутировать можно через вызовы методов внешнее состояние:
const state = () => {
 let pure = 'state';
 return Object.freeze({
   get fucking() {
     return pure;
   },
   fuck(value) {
     fucking = value;
   }
 });
};

const pureFunction = state => {
 state.fuck('pure');
 return state.fucking.length;
};

console.log(pureFunction(state()));
источник