Size: a a a

pro.rb (Ruby/Rails / RU)

2021 June 28

МВ

Максим Вейсгейм... in pro.rb (Ruby/Rails / RU)
Это про дто-шки и фабрики фабрик?
источник

МВ

Максим Вейсгейм... in pro.rb (Ruby/Rails / RU)
Да я как то сам + от коллег набрался, если хочешь могу попробовать абстрактно описать словами
источник

AM

Anton Machkasov in pro.rb (Ruby/Rails / RU)
Давай :) а то мы только используем service objects и я первый раз такое разделение увидел :)
источник

IN

Ivan Naumov in pro.rb (Ruby/Rails / RU)
и они тоже (хотя в реальности встречал в руби  такое никогда)
источник

AI

Alex Ilizarov in pro.rb (Ruby/Rails / RU)
Wazzup
источник

AI

Alex Ilizarov in pro.rb (Ruby/Rails / RU)
Не знаю что там и как, но на одном руби проекте где работал так и сделали. Всякие презентеры, фабрики и прочие объекты
источник

AI

Alex Ilizarov in pro.rb (Ruby/Rails / RU)
Не то чтобы это плохо работало на самом деле
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
Я использую 10-15 слоев и мне норм
источник

МВ

Максим Вейсгейм... in pro.rb (Ruby/Rails / RU)
Интерактор это класс куда ты кидаешь объекты и описываешь логику между ними, по сути все то же самое что и в сервисах, только с большим упором именно на какие либо операции между объектами

Квери это классы которые описывают общение с базой данных, типа там нужно тебе в модели комментариев пагинация фильтрация и тд, пишешь квери класс конкретно для этих операций с удобным интерфейсом, по необходимости используешь нужные другие квери обджекты и мержишь запросы между собой с помощью ActiveRelation#merge и в итоге в общем должно быть так, чтоб у тебя на любые запросы в базу данных должны быть соответствующие квери объекты каждый в своем "домене" с удобным интерфейсом и работающие в один запрос

Виджет это по сути тот же сервис объект но возвращать он всегда должен число, т.е. это конкретные классы для подсчитывания каких либо числовых значений, и с фронта для них одна точка входа куда фронт кидает названия нужных виджетов и параметры для них, а ты вызываешь их считаешь что нужно и отдаешь на фронт одним ответом все
источник

МВ

Максим Вейсгейм... in pro.rb (Ruby/Rails / RU)
Я думаю это часто в итоге приводит к коду ради кода, но я уверен можно найти золотую середину
источник

IN

Ivan Naumov in pro.rb (Ruby/Rails / RU)
из функционального программирования в руби очень приятно юзать монады - очень удобно при реализации command/operation transaction/interaction объектов
источник

МВ

Максим Вейсгейм... in pro.rb (Ruby/Rails / RU)
Это просто такая штука где либо все юзают либо останется футпртнт от одного разработчика которому на конференции сказали "монады круто" и он решил попробовать
источник

AM

Anton Machkasov in pro.rb (Ruby/Rails / RU)
Понял, спасибо!
У нас для тех которые считают что то мы в неймигге выделяем 'Calculator' и query object выделяем в сервис когда функция большой становится, но делали это больше интуитивно :)
источник

МВ

Максим Вейсгейм... in pro.rb (Ruby/Rails / RU)
Большинство паттернов люди часто по незнанию как раз интуитивно и используют, так я думаю их и выделил со временем)
источник

AM

Anton Machkasov in pro.rb (Ruby/Rails / RU)
Ага :)
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
А чем удобны монадки?
источник

IN

Ivan Naumov in pro.rb (Ruby/Rails / RU)
согласование вывода и ввода данных, ты всегда знаешь какой тип данных тебе придет и вот эта "контейнерность" позволяет намного удобнее писать тесты
источник

NP

Nicolae Paraschiva in pro.rb (Ruby/Rails / RU)
А можно на практике? Если есть время конечно

Я юзал в драй транзакциях и смотрел их отдельно, но не увидел особого смысла в них
источник

EM

Eugene Maslenkov in pro.rb (Ruby/Rails / RU)
Монадки норм. Но, опять же, хотелось бы их видеть по всему проекту, а не в одном месте AR#create, в другом AR#create!, в следущем service обжект и кое где монадки или rectify :).
источник

IN

Ivan Naumov in pro.rb (Ruby/Rails / RU)
ну как объяснить, в зависимости от результата операции (success, failtrue, some, none) ты строишь дальнейшую логику транзакции

так же ты как бы биндишь их в цепочку вызовов без согласования типа возвращаемых данных каждой операции. Из-за чего ты точно всегда знаешь что у тебя будет ответ который ты скорее всего уже обработал

Это просто упрощает написание кода, позволяет строить цепочки вызовов более удобно
источник