Ruby meetup №19 (Online)
Спикеры
Программа
Все знают, что бизнес–логику в Rails лучше держать подальше от моделей и контроллеров: паттерн «service object» и все его многочисленные родственники давно и плотно вошли в обиход. Результатом работы такого примитива является некий результат: либо успешный (содержащий некие данные внутри), либо не очень (обычно там одна или несколько ошибок). Как известно, если вам нужна некая новая абстракция — нужно почитать книжку по функциональному программированию, и она там обязательно найдется. Этот самый результат не стал исключением: для нашей задачи подойдут монады Either или Maybe (пользователи dry-monads не дадут соврать). Однако, если копнуть чуть глубже, то выяснится, что, кроме монад, нам подойдет еще одна абстракция: аппликативные функторы. Они более ограничены, но более просты. В докладе мы выясним, что же такое функтор, как сделать его аппликативным, как превратить его в монаду, и в чем же, черт возьми, разница между ними!
Предлагаю обратиться к опыту популярных библиотек, чтобы попытаться перенять их опыт. Попробуем оценить удачность разных решений и понять, чему мы можем из них научиться.
У нас в Нетологии кроме Ruby есть немного PHP кода, доставшегося в наследство. А где PHP код там "чистый SQL" и много таблиц: 737 штук. Когда мы портировали это все на Ruby то с удивлением обнаружили что, во-первых, портянки SQL это не всегда абсолютное зло. А, во-вторых, Active Record может далеко не всё. В доклад я расскажу вам, как мы используем "Arel": SQL Builder из ActiveRecord, дающий доступ к низкоуровневому синтаксису и позволяющий использовать Базу Данных на максимум.
Базовые принципы написания кода позволяют писать более чистый, понятный и поддерживаемый код. В отличии от паттернов проектирования их набор не велик и их гораздо проще запомнить. К тому же, паттерны основаны на принципах и, зная последние, можно придумывать шаблоны для своей ситуации самостоятельно. Проблема же в том, что принципы абстрактны и из-за этого их тяжело понять. В данном докладе я постараюсь объяснить основные принципы простым языком и на примерах. А так же покажу, как их можно применять в повседневной жизни.