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

A polyglot's view of Ruby and Rails

A polyglot's view of Ruby and Rails

Зачем писать на Ruby и Rails в 2018, что писать, и как писать

Leonid Shevtsov

May 19, 2018
Tweet

More Decks by Leonid Shevtsov

Other Decks in Programming

Transcript

  1. A polyglot's view of Ruby & Rails или "Кому нужны

    рельсы в 2018?" Leonid Shevtsov · Ruby Meditation · May 2018 · Dnipro
  2. Привет! Меня зовут Леня, и я не фанат Ruby →

    Десять лет назад я был им очарован
  3. Привет! Меня зовут Леня, и я не фанат Ruby →

    Десять лет назад я был им очарован → Лет шесть назад я его ненавидел
  4. Привет! Меня зовут Леня, и я не фанат Ruby →

    Десять лет назад я был им очарован → Лет шесть назад я его ненавидел → Я долго искал ему замену
  5. Я долго искал ему замену (это сейчас модно, да?) →

    Scala → Clojure → Elixir → Golang → F# → Node.js
  6. Простота 1 # The famous Hello World # Program is

    trivial in # Ruby. Superfluous: # # * A "main" method # * Newline # * Semicolons # # Here is the Code: puts "Hello World!" 1 https://ruby-lang.org
  7. Приятный, читабельный код 2 5.times { print "Odelay!" } exit

    unless "restaurant".include? "aura" ['toast', 'cheese', 'wine'].each { |food| print food.capitalize } 2 http://poignant.guide/book/chapter-3.html
  8. Истина в Runtime class User < ApplicationRecord # поля???? end

    vs $> rails console > User.methods => [:id, :name, :email, ...]
  9. Быстрая разработка $> heroku run rails console # Copy +

    Paste > class User def buggy_method # fixed implementation goes here end end > User.where(buggy: true).each(&:buggy_method)
  10. Простота + Договоренности + Быстрая разработка = Проекты, в которых

    логика и особенно схема данных еще не выяснены.
  11. Ruby, который я люблю cвято следует рубокопу Метрики: → длина

    строки → длина метода → длина модуля → сложность → число аргументов
  12. Ruby, который я люблю хорошо документирован → манкипатчинг → хаки

    → "...я бы обыкновенно написал XXX, но тут такое дело, что я лучше напишу YYY..." → напиши это комментарием!
  13. Ruby, который я люблю → Свято следует рубокопу → Состоит

    из небольших модулей → Использует dependency injection → Не использует состояния → Простые (благодаря DI) тесты → Не злоупотребляет паттернами → Не злоупотребляет метапрограммированием → Мутирующий код изолирован и легко читабелен → Манкипатчинг четко задокументирован
  14. Rails, которые я люблю Минимум кода в моделях → валидаторы

    → жизненный цикл → ассоциации → скоупы
  15. Rails, которые я люблю Бизнес-логика в модулях → Rails -

    это только Web → Рулите вашим app/*!
  16. Rails, которые я люблю Доступ к базе из одного места

    class User < ApplicationRecord has_many :posts has_one :latest_post, class_name: 'Post', -> { order('created_at DESC') } end User.limit(10).includes(:latest_post)
  17. Rails, которые я люблю → Минимум кода в моделях →

    Минимум кода в контроллерах → Доступ к базе из одного места → Бизнес-логика в модулях → Вьюха на React → Тесты на RSpec → Capybara+Chrome