@rubylang

Страница 1139 из 1684
Anton
28.07.2017
09:49:17
ну а так да - это тупо последовательное выполнение кода

v
28.07.2017
09:49:23
а вот как в паскале писал procedure x begin procedure y; procedure z; end вот это я помню

Anton
28.07.2017
09:49:31
и главный вопрос, что в этом плохого?

Google
v
28.07.2017
09:50:56
вот именно так стараюсь не писать

Anton
28.07.2017
09:51:22
почему? что тебя не устраивает в таком подходе?

ну как минимум запись вида Worker.perform User.save(...) это тоже процедурный код

v
28.07.2017
09:52:30
ну worker и user тут откуда-то взялись

Anton
28.07.2017
09:52:42
ну это просто тебе пример

v
28.07.2017
09:52:51
а в первом примере там просто step_x, step_y

Anton
28.07.2017
09:52:52
почти из реального кода

а в первом примере там просто step_x, step_y
да, в который пробрасываются данные из предыдущего шага

v
28.07.2017
09:53:28
ну вот это не видно, потому и не нравится

Anton
28.07.2017
09:53:48
это единсвтенное, что тебе не нравится? :)

v
28.07.2017
09:54:05
yep

Anton
28.07.2017
09:54:33
ну, тебе ничто не мешает использовать fmap для этих же целий

Google
Anton
28.07.2017
09:54:48
или любой другой способ зачейнить вызовы функций/методов

Evgeny
28.07.2017
09:56:32
https://github.com/akitaonrails/chainable_methods

Кто юзал?

Есть ли смысл?)

Anton
28.07.2017
09:57:18
пока не попробуешь - не поймешь :)

Evgeny
28.07.2017
09:58:24
Ну да. Антон, чем dry-* лучше интеракторов? Точнее гема этого, хотел начать пользоваться

Anton
28.07.2017
09:59:05
да ни чем

Evgeny
28.07.2017
09:59:16
Ну ты на днях что то писал

Anton
28.07.2017
09:59:27
я же написал, что у интеракторов есть конкретная проблема. когда их 2+ - сложно чейнить

и нужно писать кучу проверок

лишних

ну и по сути dry-* и интеракторы - это разные вещи :)

Evgeny
28.07.2017
10:01:10
Просто запомнилось, что ты избавился от него вроде dry-conteiner или что то типа того, просто их не знаю толком, мб криво читал)

Fedor
28.07.2017
10:01:17
У меня возникла ситуация, когда есть некоторые модели которые создаются и обновляются в нескольких местах: внешнее api, обмен с соседним продуктом и web интерфейс. Создаются везде по разному, из примерно одинакового списка параметров. Мне это не нравилось и я переписвал все на интеракторы. Пока заметил несколько вещей: 1) Какой-то очень кривой контекст, я его по факту не использую почти. 2) Нудобно чейнить, как уже сказали. 3) Нет валидации параметров контекста удобной

Fedor
28.07.2017
10:01:43
в итоге я теперь думаю все переписать на dry-transactions с dry-validation и посмотреть что мне больше понравится

Google
Fedor
28.07.2017
10:02:24
это понятно, но в драе это вполне взаимосвязанная схема

валдиации, потом транзакции

а в интеракторах надо либо свое писать, либо еще какие-то сторонние вещи спользовать

Anton
28.07.2017
10:02:46
возможно нужно про валидации написать. потому что много проблем у людей с ними возникает

валдиации, потом транзакции
ну ты же понимаешь, что это зависит от того, как напишешь?

Fedor
28.07.2017
10:03:15
конечно

я говорю о том, что в случае с интерактором, валидировать вообще нечем

Anton
28.07.2017
10:04:16
да, потому что это о другом :)

ты же не ожидаешь, что сервис объект будет что-то про валидацию знать?

точнее не правильно выразился

ты же не ожидаешь, что сервис будет предоставлять какой-то код или методы для валидации данных?

Victor
28.07.2017
10:05:30
about computer science from the best universities and institutions

Anton
28.07.2017
10:05:45
точно так же ты можешшь в транзакцию засунуть интерактор и его использовать

т.е. это вещи, которые делают свои специфические обязаности

Fedor
28.07.2017
10:06:31
я вообще жду, что если у меня есть некий объект - контекст, то неплохо бы иметь что-то типа context.valid?

возможно с использованием другого контекста

или в другом интеракторе, когда ты сначала валидируешь, а потом прогоняешь логику

я даже подумывал этот самый context переписать, но потом решил, что получу хромой аналог двух кусков драя )

Anton
28.07.2017
10:08:03
не нравится такой подход по 2ум причинам: 1. что делать, если у тебя для одного интерактора нужно использовать 2 валидации? 2. выглядит как смешение двух разных объектов в один. между ними возникает связанность сильная и это может привести к проблемам. Посмотри на АР и валидации

Google
Nikita
28.07.2017
10:08:41
сорри, что врываюсь в ваш умный разговор с тупым вопросом, но что означает "чейнить"?

Fedor
28.07.2017
10:09:00
цепочки последовательные из методов составлять

что бы оно молго посредине сломаться и выйти

или дойти до конца

Anton
28.07.2017
10:09:22
собственно что мешает использоать что-то в таком духе: Interactor.new(validation_scheme, payload).call def call if validation_schema.call(payload) else end end

Nikita
28.07.2017
10:09:27
типа rescue где-то по середине?

Anton
28.07.2017
10:10:12
Fedor
28.07.2017
10:10:13
и который я уже скармливаю интератору

Admin
ERROR: S client not available

Fedor
28.07.2017
10:10:16
примерно так

Anton
28.07.2017
10:10:25
чейнинг это про то, как вызвать несколько функций последовательно

Fedor
28.07.2017
10:10:29
Interactor.new(validation_scheme, payload).call

No
28.07.2017
10:10:35
вчера как раз думал об этом, что мешает в dry-transaction одним из шагов юзать схему dry-validation?

или вы не об этом?

Anton
28.07.2017
10:10:49
простой пример: symbolize(get_params(user))

это можно по разному записать в разных языках

Fedor
28.07.2017
10:11:15
или вы не об этом?
как раз об этом, я думаю заменить свои интераторы именно на транзакции, в которых одним из шагов будет валидация

Google
Anton
28.07.2017
10:11:39
тебе придется писать сервис объект, который будет монаду возвращать

специально для транзакции

Fedor
28.07.2017
10:12:04
это можно по разному записать в разных языках
git br --merged | grep -v master | xargs git br -d пример чистки веток )

No
28.07.2017
10:12:14
собственно, сейчас у меня проект онли плэйн рельса (проект маленький), хочу вынести всё в dry-transactions и не вижу где я могу словить проблемы

есть чего опасаться?

Anton
28.07.2017
10:12:30
транзакция в данном случае - просто абстракция, что бы сделать какой-то railway для методов/функций

Di
28.07.2017
10:12:31
Вот вы говорите коллбеки стараться не юзать. А условные коллбеки совем зашквар как я понимаю?

Anton
28.07.2017
10:13:12
как раз об этом, я думаю заменить свои интераторы именно на транзакции, в которых одним из шагов будет валидация
ну а в целом да, сервисы, которые возвращают монаду для стейта практически полностью заменяют интеракторы

в этом поинт

но не стоит путать транзакцию и интерактор

Roman
28.07.2017
10:13:51
Расскажите, почему колбэки юзать нельзя? Речь же идет о всяких before_create и так далее Это же так удобно

Anton
28.07.2017
10:14:57
если коротко, то причин много: 1. тестировать сложно 2. нет контроля, какой из колбэков выполняется 3. сложно мокать 4. колбэки вызываются не явно, дебажить код такой сложно 5. из-за предыдущего пункта ты можешь забыть о колбэке и поесть проблем

Fedor
28.07.2017
10:15:12
особенно after_save в связанных моделях. Без проблем можно в бесконечный цикл уйти

Anton
28.07.2017
10:15:13
1. сложно читать код, ты не понимаешь от куда переменная взялась, если ты не знаешь о колбэке 2. обычно их 2+ и тут начинается веселье. как ты будешь уверен, какой выполнится первым? 3. чаще всего в колбэках мутируют данные или же письма шлют, это в свою очередь: 3.1 пиздец сложно тестировать 3.2 увеличивает связанность между частями системы, что приводит к куче проблем 3.3 почему не взять адекватное прямолинейное решение проблемы, отдельно от модели например? но почему-то всем срать и все пихается в модель/контроллер и прочее. 4. дебаг системы, в которой дохуя колбэков - отличное время препроваждения, я настоятельно рекомендую попробовать

вот

No
28.07.2017
10:16:27
на самом деле ещё можно сказать, что валидации на моделях писать плохо и опасно

Di
28.07.2017
10:16:30
Ну иногда не избежать же. Вопрос у меня только в том вызывать коллбек всегда и проверять условие уже в методе который этим коллбеком вызывается, или вызывать коллбек в зависимости от этого условия.

No
28.07.2017
10:16:31
но это вообще разрыв шаблона

Страница 1139 из 1684