rails без activerecord: старая-добрая рельса или инвалид c...
TRANSCRIPT
![Page 1: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/1.jpg)
Rails без ActiveRecord:
старая-добрая рельса или инвалид c костылями?
![Page 2: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/2.jpg)
About me: !!
Ruslan Sharipov!@sharipov_ru
!!
in ruby-world since Rails 2.3
![Page 3: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/3.jpg)
Всегда был фанатом Rails и ActiveRecord
![Page 4: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/4.jpg)
Проект: !
1 год активной разработки 3 разработчика-новичка в Rails
100% Rails-way Мало тестов
!
![Page 5: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/5.jpg)
Полгода спустя
![Page 6: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/6.jpg)
Проект: !
1.5 года активной разработки Тонна rails-way кода
CI зелёный ~ раз в месяц, а то и реже >500 opened Github issues (процентов 70 - баги)
1000-1500 LoC классы, vim тормозит !
Недовольные разработчики Недовольный заказчик
![Page 7: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/7.jpg)
3-4 месяца в режиме bugfix-only => более-менее стабильный production
![Page 8: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/8.jpg)
Всё ещё фанат Rails и ActiveRecord
![Page 9: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/9.jpg)
![Page 10: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/10.jpg)
Одно из наших решений - смена БД для некоторых сущностей.
!
!
Встречаем RethinkDB!
![Page 11: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/11.jpg)
RethinkDB: ActiveRecord или DataMapper?
![Page 12: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/12.jpg)
mongoid (ORM для MongoDB) no-brainer (ORM для RethinkDB)
elasticsearch-persistense (ORM для ES) !
не вывезут
![Page 13: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/13.jpg)
Безболезненно заменить ActiveRecord на другую ORM - невозможно
![Page 14: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/14.jpg)
ActiveRecord troubles
Violation of SRP
Say goodbye to User class with >1000 LoCSay goodbye to ActiveRecord-depended gems
Say goodbye to AR callbacks
![Page 15: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/15.jpg)
ActiveRecord troubles
Слои приложения тесно связаны друг с другом
![Page 16: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/16.jpg)
ActiveRecord troubles
Persistence Domain logic
Forms + validations Observers Callbacks
Tests
ActiveRecord model
![Page 17: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/17.jpg)
ActiveRecord troubles
Persistence Domain logic
Forms + validations Observers Callbacks
Tests
ActiveRecord model
Да, многое из того, что ^^выше^^ нам пришлось/придётся переписать
![Page 18: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/18.jpg)
Say goodbye ActiveRecord-зависимым гемам:
!devise, acts_as_paranoid/paranoia, acts_as_taggable, nested_form, draper, paperclip, paper_trail, friendly_id,
auto_strip_attributes и ещё несколько тысячам :)
![Page 19: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/19.jpg)
Прощаемся с понятием “Рельса - чтобы формочки клепать”
С отпиленным от rails ORM это не так.
![Page 20: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/20.jpg)
Представьте разработчика, которому нужно склепать новую формочку
![Page 21: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/21.jpg)
routes.rb
form_forAbility.rb
request params
polymorphic associationsAR Serializers
ActiveModel validations
url_for
form helpers
accept_nested_attributes_for
strong_parameters
csrf_token
ActionView helpers
attr_accessible
Callb
acks
![Page 22: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/22.jpg)
Безболезненно выкинуть ActiveRecord из этой истории очень сложно
![Page 23: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/23.jpg)
Теряем:Optimistic locking Dirty tracking ActiveRecord Serializers ActiveRecord Observers accept_nested_attributes_for Callback hell Головную боль при смене способа хранения :)
Приобретаем:Простые PORO модели, репозитории, сервисы, предсказуемый код Независимые друг от друга слои !
![Page 24: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/24.jpg)
Руслан, а ты читал статью CodeClimate
“7 patterns to refactor fat ActiveRecord models?!”
![Page 25: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/25.jpg)
ServiceObjects оперируют с ActiveRecord FormObjects отвечают за хранение
QueryObjects оперируют с ActiveRecord Decorator также тесно связан с ActiveRecord
![Page 26: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/26.jpg)
Было так:
Слои приложения тесно связаны друг с другом
![Page 27: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/27.jpg)
FormObject ServiceObject QueryObject
Decorator
Стало так:
![Page 28: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/28.jpg)
Не сильно лучше
![Page 29: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/29.jpg)
Conclusion…
Хорошая архитектура - редко с ActiveRecord
![Page 30: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/30.jpg)
Conclusion…
Выкинуть ActiveRecord обычно == поломать всё
![Page 31: Rails без ActiveRecord: старая-добрая рельса или инвалид c костылями?](https://reader034.vdocuments.site/reader034/viewer/2022042702/55d0359abb61ebd3698b46d1/html5/thumbnails/31.jpg)
Conclusion…
Выкинуть ActiveRecord == почти выкинуть Rails