Об этом могу часами говорить
Ребята из dry-rb любят и горят функциональщиной, и стараются принести ее в руби, который из коробки не сильно в это умеет
И приходится идти на компромиссы – DSL, мета-магия. И когда есть возможность уменьшить DSL и реализовать задачу ближе к языку – они идут по этому пути. Даже если это усложняет жизнь конечным пользователям
С монадами так и вышло:
– Эй ребят, если мы сделаем рабочей Do-нотацию в монадах, то в целом всё то, что мы раньше писали на DSL в транзакциях, теперь можно будет писать на «чистом» руби
– Вау, серьезно? Чего же мы тогда ждем, делаем!
А то, что у транзакций на ду-нотации резко ухудшилась читаемость – ну это ладно, это можно потерпеть
Мой поинт – нет, нельзя терпеть. Нам, конечным пользователям библиотеки, по большому счету плевать, насколько «чисто» и «близко к языку» она реализована (если это конечно не ActiveAdmin, повсеместный DSL в котором усложняет модификацию и дебаг). Нам важно то, насколько удобно использовать библиотеку. В данном случае – насколько удобно читать, писать и модифицировать транзакции, и переиспользовать отдельно взятые операции в них. И Dry::Transaction в этом плане дает самый приятный опыт использования