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

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

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

Ivan Nemytchenko

July 17, 2020
Tweet

More Decks by Ivan Nemytchenko

Other Decks in Technology

Transcript

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

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

    агенства • Happydev • Спикер • Белград • Гитлаб • goodrpogrammer.ru
  3. • Object oriented approach • Functional approach • DDD •

    CQRS • Event sourcing • Microservices Название идеологии ПСИХОЛОГИЯ ОБУЧАЮЩЕГОСЯ ПРОГРАММИСТА
  4. 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
  5. VANILLA Rails • Два уровня • Без жестких границ •

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

    колбэк фиганем», консерны, валидации, Current.user Да Класс!
  7. А у вас правда ООП? А скажи что-нибудь по ООП-шному!

    Dependenсy Injection, SOLID, Sandi Metz, Service Object, Адаптер, Интерактор! Да Класс!
  8. А у вас правда DDD? А скажи что-нибудь по DDD-шному!

    Bounded Context, Aggregate, Event Sourcing, Command Query Responsibility Segregation! Да Класс!
  9. А у вас правда 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)
  10. НЕДОИНЖИНИРИНГ • Слишком большие классы • Слишком большие методы •

    Недостаточно ООП-код • Дублирование кода • Применили мало паттернов • Нужны жесткие границы • Надо следовать принципам из поп-культуры Решает не те проблемы
  11. 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
  12. 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
  13. 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
  14. 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