
ojab
28.07.2017
09:49:11

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

Anton
28.07.2017
09:49:46

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
почти из реального кода

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) Нет валидации параметров контекста удобной

Anton
28.07.2017
10:01:21

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

Anton
28.07.2017
10:01:48
ты можешь сделать несколько dry-v схем и пробрасывать их в интерактор
и там уже валидировать

Google

Anton
28.07.2017
10:02:23

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 где-то по середине?

Fedor
28.07.2017
10:09:51
я хочу иметь отдельный объект контекст, который знает, валидный он или нет

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
или вы не об этом?
как раз об этом, я думаю заменить свои интераторы именно на транзакции, в которых одним из шагов будет валидация

Anton
28.07.2017
10:11:27

Google

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

Fedor
28.07.2017
10:12:04

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:04

Fedor
28.07.2017
10:14:23

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
но это вообще разрыв шаблона

Roman
28.07.2017
10:16:46