Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Откуда берется сложность в Rails-проектах и куда бы её деть?

Откуда берется сложность в Rails-проектах и куда бы её деть?

Ivan Nemytchenko

November 13, 2020
Tweet

More Decks by Ivan Nemytchenko

Other Decks in Technology

Transcript

  1. Откуда берется сложность в RAILS-ПРОЕКТАХ И КУДА БЫ ЕЁ ДЕТЬ?

    Иван Немытченко для RubyRussia 2020 inem.at, @inem
  2. Об Авторе • омич, серб-сибиряк • рубист-фрилансер с 2006 •

    2 агенства, 2 конфы • евангелист в Гитлабе • учитель на GoodProgrammer.ru • development lead в UrbanConnect.ch • автор книги PainlessRails.com
  3. НЕОБЯЗАТЕЛЬНАЯ СЛОЖНОСТЬ • на if-ах • нужен сервис-обжект • на

    proc-aх • pattern-matching же • 18 полиморфных классов • вынесем в микросервис
  4. Сложно • неочевидный порядок выполнения • состоит из многих частей

    • нужно искать составные части или используемые • неявный вызов
  5. ЛЕГКО (но СЛОЖНО) “Simple made easy” - Rich Hickey •

    хорошо знакомое • легко использовать • подробно описанное
  6. Сложно vs ПРОСТО “Simple made easy” - Rich Hickey Сложно

    Просто Methods Functions, Namespaces States, Objects Values Inheritance Polymorphism Inconsistency Consistency Syntax Data
  7. ООП • данные класса • данные объекта • функции класса

    • функции объекта • наследование • нэймспэйсы • public/private/protected • миксины/консерны “Simple made easy” - Rich Hickey
  8. Active Record • a form object • a domain object

    • a data transfer object • a database record • a database session object • a service object • a view model
  9. CALL SERVICE FROM A MODEL class User < ApplicationRecord has_many

    :trainings def create_training(params) CreateTrainingService.call(params, self) end end
  10. • слишком сильно доверяем рельсам • выбираем сложные способы когда

    хватает простых • выбираем легкие способы, когда надо прокурить сложные • application-логика впремешку с бизнес-логикой • плоская архитектура • циклические зависимости → отсутствие модульности • слишком много возможных состояний моделей • кастомные фишки базы данных • бардак с сервисным слоем multidimensional Complexity bomb
  11. необходимый минимум • Accidental complexity and essential complexity • Simple

    vs easy • Application logic vs Business logic • Layered architecture • Single level of abstraction principle • Domain Driven Design • Service layer