Pro Yearly is on sale from $80 to $50! »

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

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

F9c1a378a1e3926ea1a58cf724140000?s=128

Ivan Nemytchenko

November 13, 2020
Tweet

Transcript

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

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

    2 агенства, 2 конфы • евангелист в Гитлабе • учитель на GoodProgrammer.ru • development lead в UrbanConnect.ch • автор книги PainlessRails.com
  3. Откуда берется сложность • Разработчики - дебилы! • Фрэймворк -

    отстой!
  4. О круж ение Откуда берется сложность

  5. Откуда берется сложность • Разработчики→доучиться • Фрэймворк →понять слабые места

    • Предметная область • Окружение
  6. “No silver bullet” - Fred Brooks

  7. Неотъемлемая сложность

  8. НЕОБЯЗАТЕЛЬНАЯ СЛОЖНОСТЬ • на if-ах • нужен сервис-обжект • на

    proc-aх • pattern-matching же • 18 полиморфных классов • вынесем в микросервис
  9. Две модели

  10. “Simple made easy” - Rich Hickey

  11. Сложно • неочевидный порядок выполнения • состоит из многих частей

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

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

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

    • функции объекта • наследование • нэймспэйсы • public/private/protected • миксины/консерны “Simple made easy” - Rich Hickey
  15. 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
  16. Application-логика VS БиЗнес—логика

  17. Application-логика Мысленный эксперимент

  18. Application-логика Джобы Мэйлеры Current user Авторизация

  19. Бизнес-логика

  20. Layered architecture

  21. OSI MODEL

  22. THE Clean Architecture

  23. Layered Architecture LAYERED ARCHITECTURE “Service layer” - Fowler

  24. Распространение знания о системе KNOWLEDGE DIRECTION

  25. KNOWLEDGE DIRECTION Распространение знания о системе

  26. CALL SERVICE FROM A MODEL class User < ApplicationRecord has_many

    :trainings def create_training(params) CreateTrainingService.call(params, self) end end
  27. GEMS DO THAT TOO

  28. CURRENT USER IN MODELS

  29. SInGle level of abstraction

  30. Service Layer

  31. Domain driven Design “DDD” - Eric Evans

  32. Разработчик и ООП

  33. Разработчик и ФП

  34. Разработчик и DDD

  35. multidimensional Complexity bomb

  36. • слишком сильно доверяем рельсам • выбираем сложные способы когда

    хватает простых • выбираем легкие способы, когда надо прокурить сложные • application-логика впремешку с бизнес-логикой • плоская архитектура • циклические зависимости → отсутствие модульности • слишком много возможных состояний моделей • кастомные фишки базы данных • бардак с сервисным слоем multidimensional Complexity bomb
  37. необходимый минимум • 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
  38. • painlessrails.com • inem@hey.com • @inem • inem.at