SlideShare a Scribd company logo
1 of 31
Download to read offline
Rails без ActiveRecord:
старая-добрая рельса или
инвалид c костылями?
About me:
!
!
Ruslan Sharipov!
@sharipov_ru
!
!
in ruby-world since Rails 2.3
Всегда был фанатом Rails и ActiveRecord
Проект:
!
1 год активной разработки
3 разработчика-новичка в Rails
100% Rails-way
Мало тестов
!
Полгода спустя
Проект:
!
1.5 года активной разработки
Тонна rails-way кода
CI зелёный ~ раз в месяц, а то и реже
>500 opened Github issues (процентов 70 - баги)
1000-1500 LoC классы, vim тормозит
!
Недовольные разработчики

Недовольный заказчик
3-4 месяца в режиме bugfix-only
=> более-менее стабильный production
Всё ещё фанат Rails и ActiveRecord
Одно из наших решений - смена БД
для некоторых сущностей.
!
!
Встречаем RethinkDB!
RethinkDB:
ActiveRecord или DataMapper?
mongoid (ORM для MongoDB)
no-brainer (ORM для RethinkDB)
elasticsearch-persistense (ORM для ES)
!
не вывезут
Безболезненно заменить ActiveRecord
на другую ORM - невозможно
ActiveRecord troubles
Violation of SRP
Say goodbye to User class with >1000 LoC
Say goodbye to ActiveRecord-depended gems
Say goodbye to AR callbacks
ActiveRecord troubles
Слои приложения
тесно связаны друг с другом
ActiveRecord troubles
Persistence
Domain logic
Forms + validations
Observers
Callbacks
Tests
ActiveRecord model
ActiveRecord troubles
Persistence
Domain logic
Forms + validations
Observers
Callbacks
Tests
ActiveRecord model
Да, многое из того, что ^^выше^^ нам
пришлось/придётся переписать
Say goodbye
ActiveRecord-зависимым гемам:
!
devise, acts_as_paranoid/paranoia, acts_as_taggable,
nested_form, draper, paperclip, paper_trail, friendly_id,
auto_strip_attributes и ещё несколько тысячам :)
Прощаемся с
понятием “Рельса - чтобы формочки клепать”
С отпиленным от rails ORM это не так.
Представьте разработчика,
которому нужно склепать новую формочку
routes.rb
form_for
Ability.rb
request
params
polymorphic
associations
AR Serializers
ActiveModel
validations
url_for
form helpers
accept_nested_attributes_for
strong_parameters
csrf_token
ActionView
helpers
attr_accessible
Callbacks
Безболезненно выкинуть ActiveRecord
из этой истории очень сложно
Теряем:
Optimistic locking
Dirty tracking
ActiveRecord Serializers
ActiveRecord Observers
accept_nested_attributes_for
Callback hell
Головную боль при смене способа хранения :)
Приобретаем:
Простые PORO модели, репозитории, сервисы,
предсказуемый код
Независимые друг от друга слои
!
Руслан, а ты читал
статью CodeClimate
“7 patterns to refactor fat
ActiveRecord models?!”
ServiceObjects оперируют с ActiveRecord
FormObjects отвечают за хранение
QueryObjects оперируют с ActiveRecord
Decorator также тесно связан с ActiveRecord
Было так:
Слои приложения
тесно связаны друг с другом
FormObject ServiceObject QueryObject
Decorator
Стало так:
Не сильно лучше
Conclusion…
Хорошая архитектура - редко с ActiveRecord
Conclusion…
Выкинуть ActiveRecord обычно == поломать всё
Conclusion…
Выкинуть ActiveRecord == почти выкинуть Rails

More Related Content

Viewers also liked

Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"railsclub
 
Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016zykin-ilya
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For DummiesAndrey Subbota
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложенийAndrey Sitnik
 
Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Vitalii Tytskyi
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубистаKir Shatrov
 
10 reasons I love RubyOnRails
10 reasons I love RubyOnRails10 reasons I love RubyOnRails
10 reasons I love RubyOnRailsPavel Gabriel
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsYaroslav Markin
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Andrey Listochkin
 
Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Andrey Listochkin
 
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...Alexander Dymo
 
Immutable servers with Packer/Chef/AWS
Immutable servers with Packer/Chef/AWSImmutable servers with Packer/Chef/AWS
Immutable servers with Packer/Chef/AWSPavel Gabriel
 

Viewers also liked (20)

Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"
 
Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For Dummies
 
RSpec. Part 1
RSpec. Part 1RSpec. Part 1
RSpec. Part 1
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложений
 
Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.
 
Rails Concerns
Rails ConcernsRails Concerns
Rails Concerns
 
Assets Pipeline
Assets PipelineAssets Pipeline
Assets Pipeline
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубиста
 
10 reasons I love RubyOnRails
10 reasons I love RubyOnRails10 reasons I love RubyOnRails
10 reasons I love RubyOnRails
 
RSpec. Part 3
RSpec. Part 3RSpec. Part 3
RSpec. Part 3
 
RSpec. Part 2
RSpec. Part 2RSpec. Part 2
RSpec. Part 2
 
Ruby on Rails for noobs
Ruby on Rails for noobsRuby on Rails for noobs
Ruby on Rails for noobs
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013
 
Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014Секретный доклад о React Router - OdessaJS 2014
Секретный доклад о React Router - OdessaJS 2014
 
Why does code style matter?
Why does code style matter?Why does code style matter?
Why does code style matter?
 
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
Alexander Dymo - RubyConf 2014 - Ruby Performance Secrets and How to Uncover ...
 
Immutable servers with Packer/Chef/AWS
Immutable servers with Packer/Chef/AWSImmutable servers with Packer/Chef/AWS
Immutable servers with Packer/Chef/AWS
 

Similar to Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?

WebCamp2016:Front-End_Роман Якобчук_Relay, GraphQL и остальные радости соврем...
WebCamp2016:Front-End_Роман Якобчук_Relay, GraphQL и остальные радости соврем...WebCamp2016:Front-End_Роман Якобчук_Relay, GraphQL и остальные радости соврем...
WebCamp2016:Front-End_Роман Якобчук_Relay, GraphQL и остальные радости соврем...WebCamp
 
Разрушаем негативные мифы Ruby, Rails.
Разрушаем негативные мифы Ruby, Rails.Разрушаем негативные мифы Ruby, Rails.
Разрушаем негативные мифы Ruby, Rails.Ravil Bayramgalin
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Yury Bushmelev
 
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.HappyDev-lite
 
A polyglot's view of Ruby on Rails – Leonid Shevtsov
A polyglot's view of Ruby on Rails –  Leonid ShevtsovA polyglot's view of Ruby on Rails –  Leonid Shevtsov
A polyglot's view of Ruby on Rails – Leonid ShevtsovRuby Meditation
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016Alex Chistyakov
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyAlex Chistyakov
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеDenis Izmaylov
 
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Badoo Development
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsАлександр Ежов
 
Антон Виноградов — БЭМ on Rails
Антон Виноградов — БЭМ on RailsАнтон Виноградов — БЭМ on Rails
Антон Виноградов — БЭМ on RailsYandex
 
JSON-RPC или когда rest неудобен
JSON-RPC или когда rest неудобенJSON-RPC или когда rest неудобен
JSON-RPC или когда rest неудобенPyNSK
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Ontico
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014Alex Chistyakov
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Constantin Kichinsky
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustMichael Pankov
 

Similar to Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями? (20)

WebCamp2016:Front-End_Роман Якобчук_Relay, GraphQL и остальные радости соврем...
WebCamp2016:Front-End_Роман Якобчук_Relay, GraphQL и остальные радости соврем...WebCamp2016:Front-End_Роман Якобчук_Relay, GraphQL и остальные радости соврем...
WebCamp2016:Front-End_Роман Якобчук_Relay, GraphQL и остальные радости соврем...
 
Разрушаем негативные мифы Ruby, Rails.
Разрушаем негативные мифы Ruby, Rails.Разрушаем негативные мифы Ruby, Rails.
Разрушаем негативные мифы Ruby, Rails.
 
Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.Карта граблей на поле сбора и доставки логов. Lazada-way.
Карта граблей на поле сбора и доставки логов. Lazada-way.
 
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
13 HappyDev-lite-2015 autumn. Руслан Шарипов. Ruby, making programmers happy.
 
A polyglot's view of Ruby on Rails – Leonid Shevtsov
A polyglot's view of Ruby on Rails –  Leonid ShevtsovA polyglot's view of Ruby on Rails –  Leonid Shevtsov
A polyglot's view of Ruby on Rails – Leonid Shevtsov
 
My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016My talk on HBase ops engineering at TBD Jun 2016
My talk on HBase ops engineering at TBD Jun 2016
 
Опыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на RubyОпыт эксплуатации большого проекта на Ruby
Опыт эксплуатации большого проекта на Ruby
 
Актуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработкеАктуальные технологии и тренды в веб-разработке
Актуальные технологии и тренды в веб-разработке
 
Rails for dummies
Rails for dummiesRails for dummies
Rails for dummies
 
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
Эволюция php code coverage в Badoo. Доклад Ильи Агеева на LoveQA РИТ.
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
 
Антон Виноградов — БЭМ on Rails
Антон Виноградов — БЭМ on RailsАнтон Виноградов — БЭМ on Rails
Антон Виноградов — БЭМ on Rails
 
JSON-RPC
JSON-RPCJSON-RPC
JSON-RPC
 
JSON-RPC или когда rest неудобен
JSON-RPC или когда rest неудобенJSON-RPC или когда rest неудобен
JSON-RPC или когда rest неудобен
 
Rapid API development
Rapid API developmentRapid API development
Rapid API development
 
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...Устройство современного распределенного Object Storage на примере LeoFS, Алек...
Устройство современного распределенного Object Storage на примере LeoFS, Алек...
 
My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014My talk on LeoFS, Highload++ 2014
My talk on LeoFS, Highload++ 2014
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!
 
Первые страницы на Ruby on Rails
Первые страницы на Ruby on Rails Первые страницы на Ruby on Rails
Первые страницы на Ruby on Rails
 
Практика разработки веб-серверов на Rust
Практика разработки веб-серверов на RustПрактика разработки веб-серверов на Rust
Практика разработки веб-серверов на Rust
 

Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?