Rails без боли и оверинжиниринга

Rails без боли и оверинжиниринга

F9c1a378a1e3926ea1a58cf724140000?s=128

Ivan Nemytchenko

July 17, 2020
Tweet

Transcript

  1. bit.ly/pain-overengineering PAINLESS RAILS «Рельсы без боли и оверинжиниринга»

  2. bit.ly/pain-overengineering PAINLESS RAILS «Рельсы без боли и оверинжиниринга»

  3. bit.ly/pain-overengineering PAINLESS RAILS «Рельсы без боли и оверинжиниринга»

  4. bit.ly/pain-overengineering

  5. bit.ly/pain-overengineering ПЛАН 1. Боль ↭ Оверинжиниринг 2. Теория (Логики и

    SLA) 3. Сравнение (Rails, DDD, Dry-rb подходы) 4. Доп. материалы, что изучать, куда копать.
  6. • Омск • Рубист с 2006 • Фриланс • Агенства

    • …
  7. bit.ly/pain-overengineering

  8. bit.ly/pain-overengineering

  9. • Омск • Рубист с 2006 • Фриланс • Два

    агенства • Happydev • Спикер • Белград • Гитлаб • goodrpogrammer.ru
  10. bit.ly/pain-overengineering Боль → ОВЕРИНЖИНИРИНГ Доверились рельсам

  11. bit.ly/pain-overengineering Боль → ОВЕРИНЖИНИРИНГ Доверились рельсам Потеряли контроль

  12. ПОП-КУЛЬТУРА Роберт Мартин

  13. ПОП-КУЛЬТУРА Роберт Мартин Мартин Фаулер

  14. ПОП-КУЛЬТУРА Роберт Мартин Мартин Фаулер Фаулер Роберт

  15. ПОП-КУЛЬТУРА Роберт Мартин Мартин Фаулер Фаулер Роберт Эрик Эванс

  16. ПОП-КУЛЬТУРА SOLID Design Patterns Domain Driven Design

  17. bit.ly/pain-overengineering Боль → ОВЕРИНЖИНИРИНГ Доверились рельсам Потеряли контроль Нарулили контроль

  18. bit.ly/pain-overengineering Боль → ОВЕРИНЖИНИРИНГ Доверились рельсам Потеряли контроль Нарулили контроль

    Потеряли удовольствие от разработки
  19. railshurts.com/posts inem.at

  20. bit.ly/pain-overengineering ПСИХОЛОГИЯ ОБУЧАЮЩЕГОСЯ ПРОГРАММИСТА ООП ООП

  21. bit.ly/pain-overengineering ПСИХОЛОГИЯ ОБУЧАЮЩЕГОСЯ ПРОГРАММИСТА SOLID SOLID

  22. bit.ly/pain-overengineering ПСИХОЛОГИЯ ОБУЧАЮЩЕГОСЯ ПРОГРАММИСТА DDD DDD

  23. • Object oriented approach • Functional approach • DDD •

    CQRS • Event sourcing • Microservices Название идеологии ПСИХОЛОГИЯ ОБУЧАЮЩЕГОСЯ ПРОГРАММИСТА
  24. В СРЕДНЕМ БИЗНЕСУ НУЖНО ОДНО и то же

  25. КОДИНГ - это обслуживающая функция

  26. Случайная сложность vs НЕОБХОДИМАЯ сложность

  27. Презентер Команда Адаптер Джоба Маппер JSONB Полиси Хэндлер Случайная vs

    НЕОБХОДИМАЯ
  28. Случайная vs НЕОБХОДИМАЯ ?

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

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

  31. bit.ly/pain-overengineering Бизнес логика не зависит • ни от фрэймворка •

    ни от языка • ни от платформы
  32. OSI (Open Systems Interconnection) model

  33. Layered Architecture

  34. Layered Architecture Модели предметной области Бизнес логика Application логика

  35. bit.ly/pain-overengineering ЕСТЬ ТРИ Стула…

  36. VANILLA Rails

  37. class User < ApplicationRecord validates :email, confirmation: true validates :password,

    confirmation: true validates :terms_of_service, acceptance: true before_create do self.request_id = Current.request_id self.user_agent = Current.user_agent self.ip_address = Current.ip_address end end VANILLA Rails
  38. VANILLA Rails

  39. VANILLA Rails

  40. В ЧЕМ проблема

  41. VANILLA Rails • Два уровня • Без жестких границ •

    Логика вперемешку • Рельсы активно поощряют не думать об этом
  42. Ммм, Рельсы? А скажи что-нибудь по рельсовому! «А щас просто

    колбэк фиганем», консерны, валидации, Current.user Да Класс!
  43. Василий, тут это, надо фичу запилить

  44. Василий, тут это, надо фичу запилить Возьмем Рельсы?

  45. Василий, тут это, надо фичу запилить Возьмем Рельсы?

  46. Название идеологии ПСИХОЛОГИЯ ОБУЧАЮЩЕГОСЯ ПРОГРАММИСТА

  47. bit.ly/pain-overengineering Режим «мамкин архитектор»

  48. ИДЕАЛОГИЧЕСКИ ЗАРЯЖЕННЫЙ КОД Боль

  49. А у вас правда ООП? А скажи что-нибудь по ООП-шному!

    Dependenсy Injection, SOLID, Sandi Metz, Service Object, Адаптер, Интерактор! Да Класс!
  50. ИДЕАЛОГИЧЕСКИ ЗАРЯЖЕННЫЙ КОД DDD

  51. А у вас правда DDD? А скажи что-нибудь по DDD-шному!

    Bounded Context, Aggregate, Event Sourcing, Command Query Responsibility Segregation! Да Класс!
  52. bit.ly/pain-overengineering DOMAIN DRIVEN DESIGN

  53. DDD1 - идейная часть

  54. DDD2 - «Практическая» часть

  55. НаС зАВОРАЖИВАЮТ КРАСИВЫЕ СЛОЖНЫЕ ШТУКИ

  56. НаС зАВОРАЖИВАЮТ КРАСИВЫЕ СЛОЖНЫЕ ШТУКИ

  57. DDD2 На практике

  58. DDD2 На практике

  59. DDD2 На практике

  60. ИДЕАЛОГИЧЕСКИ ЗАРЯЖЕННЫЙ КОД Dry-rb

  61. А у вас правда Dry-rb? А скажи что-нибудь по dryrb-шному!

    Монады, Operation, Entity, Repository Да Класс! Success! include Import[ 'organisations.libs.token_generator', repo: 'repositories.organisation' ] optional(:tags).maybe(:array?) optional(:status).value(!::Core!::Types!::ServiceStatus)
  62. Dry-rb

  63. ЛЕГКО vs ПРОСТО

  64. Легкость - субъективна ЛЕгко vs Просто

  65. Простота - объективна ЛЕгко vs Просто

  66. bit.ly/pain-overengineering В поисках идеальной архитектуры

  67. bit.ly/pain-overengineering Оверинжиниринг What you think is what you get

  68. bit.ly/pain-overengineering РЕАЛЬНАЯ ЖИЗНЬ Пуристам тут не место

  69. Рельсоболь Оверинжиниринг ↭ ЕСТЬ ТРИ Стула

  70. Рельсоболь Оверинжиниринг ? ЕСТЬ ТРИ Стула

  71. НЕДОИНЖИНИРИНГ

  72. bit.ly/pain-overengineering

  73. НЕДОИНЖИНИРИНГ • Слишком большие классы • Слишком большие методы •

    Недостаточно ООП-код • Дублирование кода • Применили мало паттернов • Нужны жесткие границы • Надо следовать принципам из поп-культуры Решает не те проблемы
  74. ЕСТЬ ТРИ Стула Рельсоболь Оверинжиниринг Недоинжиниринг

  75. bit.ly/pain-overengineering Just enough engineering

  76. 1. ударить молотком - 10 коп. 2. знать, где -

    9.90 руб. Just enough engineering
  77. bit.ly/pain-overengineering Just enough engineering

  78. bit.ly/pain-overengineering Презентер Адаптер Полиморфизм Dependency Inversion Dependency Injection Функция Класс

    Наследование Side effects Null Objects Exceptions Declarative Imperative Functional Object Oriented Factory Repository Value object Entity Монады BPMN Railway programming CQRS Event Sourcing Service Layer Aggreagte Bounded Context ORM Background Jobs Domain events Callbacks Concerns Form Object Chaining Pattern Matching Миграции Rake-таски Авторизация TDD Policy Just enough engineering
  79. bit.ly/pain-overengineering Презентер Адаптер Полиморфизм Dependency Inversion Dependency Injection Функция Класс

    Наследование Side effects Null Objects Exceptions Declarative Imperative Functional Object Oriented Factory Repository Value object Entity Монады BPMN Railway programming CQRS Event Sourcing Service Layer Aggreagte Bounded Context ORM Background Jobs Domain events Callbacks Concerns Form Object Chaining Pattern Matching Миграции Rake-таски Авторизация TDD Policy Just enough engineering
  80. bit.ly/pain-overengineering Презентер Адаптер Полиморфизм Dependency Inversion Dependency Injection Функция Класс

    Наследование Side effects Null Objects Exceptions Declarative Imperative Functional Object Oriented Factory Repository Value object Entity Монады BPMN Railway programming CQRS Event Sourcing Service Layer Aggreagte Bounded Context ORM Background Jobs Domain events Callbacks Concerns Form Object Chaining Pattern Matching Миграции Rake-таски Авторизация TDD Policy 2 руб. 40 коп. = Just enough engineering
  81. bit.ly/pain-overengineering Презентер Адаптер Полиморфизм Dependency Inversion Dependency Injection Функция Класс

    Наследование Side effects Null Objects Exceptions Declarative Imperative Functional Object Oriented Factory Repository Value object Entity Монады BPMN Railway programming CQRS Event Sourcing Service Layer Aggreagte Bounded Context ORM Background Jobs Domain events Callbacks Concerns Form Object Chaining Pattern Matching Миграции Rake-таски Авторизация TDD Policy Just enough engineering
  82. bit.ly/pain-overengineering Айда учиться вместе

  83. bit.ly/pain-overengineering НЕ доделывай

  84. bit.ly/pain-overengineering Айда учиться вместе

  85. bit.ly/pain-overengineering КАК СРАВНИВАТЬ РАЗНЫЕ ПОДХОДЫ ?

  86. bit.ly/pain-overengineering PAINLESS RAILS «Наводим порядок в моделях» bit.ly/pain-overengineering