
Fedor
08.02.2018
20:54:58
Или класс
И то и другое в руби есть из коробки и отлично работает

ojab
08.02.2018
20:56:08

Aleks
08.02.2018
20:56:11

Google

Fedor
08.02.2018
20:57:21
Как бы di реализуется, к примеру стратегией, или контекстом для интерактора, драй зачем, я так и не придумал

Aleks
08.02.2018
20:58:16
зачем драй что? там вообще то набор гемов.

Fedor
08.02.2018
20:58:34
Зачем драй что угодно )
Я пробовал монады, контейнеры, транзакции

Aleks
08.02.2018
20:58:48
Правильно - хэши наше все )

Fedor
08.02.2018
20:59:30
Ну транзакции, еще полезны иногда, хотя в рельсе чаще всего можно в ar транзакцию завернуть )

Aleks
08.02.2018
21:00:28
…а зачем?
я наверно немного неправильно понимаю ваш манифест. Выше написал зачем

ojab
08.02.2018
21:02:44

Fedor
08.02.2018
21:02:45

Aleks
08.02.2018
21:03:32
Чего?
ar и dry-transaction

ojab
08.02.2018
21:03:53

Google

Anton
08.02.2018
21:04:14
Не привязанные вообще ни к чему

ojab
08.02.2018
21:04:56

Aleks
08.02.2018
21:05:29
ладно, я понял
спасибо парни )
всем приятного вечера )

ojab
08.02.2018
21:06:45
используется
…и ты хочешь этот самый контейнер со всеми шагами заинжектить в одну и ту же транзакцию, но по разному резолвить шаги?

Anton
08.02.2018
21:06:56

Fedor
08.02.2018
21:07:51

Anton
08.02.2018
21:08:13
Как пример, валидация, сохранение в бд и спавн воркера
3 шага, которые изолированы
Поэтому не стоит путать бизнес транзакцию и дб транзакцию :)

Fedor
08.02.2018
21:10:08
валидация в АР происходит перед сейвом базы, и она не меняет состояние, так что для нее транзакция вообще не нужна
воркер создается после сейва, если он успешен

ojab
08.02.2018
21:11:25
валидации в ar слабо приспособлены для проверки чего-то большего, чем сам валидируемый объект (i. e. ассоциации и прочее)

Anton
08.02.2018
21:11:31

Fedor
08.02.2018
21:11:55
ну да, если идея писать на dry, то без dry никак не обойтись )))

Google

ojab
08.02.2018
21:12:06
ну и проверки на тему "а может ли юзер менять объект" — тоже валидации, но в AR их точно не засунешь

Anton
08.02.2018
21:12:13

ojab
08.02.2018
21:13:18

Fedor
08.02.2018
21:14:40

ojab
08.02.2018
21:14:58
раньше — это где? В контроллере?

Anton
08.02.2018
21:15:32

ojab
08.02.2018
21:16:31
ну таки да, обычно в этих случаях аозникают сервис-обжекты, dry-transaction вполне себе реализация скелета сервис-обжектов.

Anton
08.02.2018
21:18:22

ojab
08.02.2018
21:20:35
люди делятся на счастливчиков, кто не понимают зачем нужны dry-transaction и иже, и на тех кто уже познал боль

Anton
08.02.2018
21:21:10

ojab
08.02.2018
21:22:19

Fedor
08.02.2018
21:22:49

ojab
08.02.2018
21:23:09
dry-transaction — это и есть сервисы
(скелет для сервисов)
(и там необязательно использовать DI, контейнеры и прочее, хотя почитав доки и послушав @davydovanton может сложиться такое впечатление)

Fedor
08.02.2018
21:26:44
ну как бы все что они дают, без контейнеров - это откат из коробки

ojab
08.02.2018
21:27:01
они не дают откат, вообще

Fedor
08.02.2018
21:27:11
в целом неплохо, но и не слишком много, что бы тащить их везде где не попадя

Google

Fedor
08.02.2018
21:27:28
как я понял, если хоть один шаг не проходит, транзакция валится

Anton
08.02.2018
21:27:40

Fedor
08.02.2018
21:27:57
тогда зачем они вообще нужны?

Anton
08.02.2018
21:28:07

Fedor
08.02.2018
21:28:11
транзакции

Anton
08.02.2018
21:28:22

Fedor
08.02.2018
21:28:23
если они не дают базового функционала транзакции )
ага

Anton
08.02.2018
21:28:47
Они предоставляют способ группировать логику и выполнять ее по шагам в rail way стиле

Fedor
08.02.2018
21:29:10
да при чем тут бд вообще
мы сейчас вроде полностью про драй

Anton
08.02.2018
21:29:34

Fedor
08.02.2018
21:29:48
без контейнеров транзакция в драе - просто класс с методом call который может остановить работу если ожин из шагов не прошел
все то же самое может любой другой класс, у которого написан метод call

Anton
08.02.2018
21:30:04
https://fsharpforfunandprofit.com/rop/
И в зависимости от результата идет дальше или возвращает «плохое» значение

Google

ojab
08.02.2018
21:31:04

Fedor
08.02.2018
21:31:08

Anton
08.02.2018
21:31:24
Или ханами интерактор
Или взять монады и свой оперейшен написать на ду нотации

Fedor
08.02.2018
21:31:45
ну вот и вопрос, зачем оно мне надо, если руби все то же самое умеет из коробки
просто функционалом своих классов

Anton
08.02.2018
21:31:54
Или вообще все руками сделать через хеши

Fedor
08.02.2018
21:32:03
я об этом с самого начала разговор и заводил
зачем,
?

Anton
08.02.2018
21:32:26
зачем,
Ну, это все одна идея функциональных объектов, просто вкусовщина как заруливать внутри

Fedor
08.02.2018
21:34:16
ну вот я пока не видел ни одной реальной причины тащить dry везде, где только можно
пару раз приходилось переписывать проекты, где его притащили до меня, без драя код оказывался чище, понятнее и так же прекрасно работал
никакой killer фичи я пока у драя не вижу, разве что в каких-то уж очень специфических ситуациях

ojab
08.02.2018
21:36:56
А зачем его тащить везде где можно?
И какие есть гемы, которые ты тащишь везде где можно?

Anton
08.02.2018
21:37:13

Fedor
08.02.2018
21:38:00
Вот его везде тащу, и рубокоп еще )))

ojab
08.02.2018
21:38:31
это сильно вспомогательное, с таким же успехом можно ещё rspec вспомнить.