Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

A polyglot's view of Ruby on Rails – Leonid Shevtsov

74 views

Published on

Ruby Meditation #22
May 19, 2018
Dnipro

Published in: Technology
  • Be the first to comment

  • Be the first to like this

A polyglot's view of Ruby on Rails – Leonid Shevtsov

  1. 1. A polyglot's view of Ruby & Rails или "Кому нужны рельсы в 2018?" Leonid Shevtsov · Ruby Meditation · May 2018 · Dnipro
  2. 2. Привет! Меня зовут Леня, и я не фанат Ruby
  3. 3. Привет! Меня зовут Леня, и я не фанат Ruby → Десять лет назад я был им очарован
  4. 4. Привет! Меня зовут Леня, и я не фанат Ruby → Десять лет назад я был им очарован → Лет шесть назад я его ненавидел
  5. 5. Привет! Меня зовут Леня, и я не фанат Ruby → Десять лет назад я был им очарован → Лет шесть назад я его ненавидел → Я долго искал ему замену
  6. 6. Я долго искал ему замену (это сейчас модно, да?)
  7. 7. Я долго искал ему замену (это сейчас модно, да?) → Scala
  8. 8. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure
  9. 9. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure → Elixir
  10. 10. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure → Elixir → Golang
  11. 11. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure → Elixir → Golang → F#
  12. 12. Я долго искал ему замену (это сейчас модно, да?) → Scala → Clojure → Elixir → Golang → F# → Node.js
  13. 13. Вообще, крайне полезно пробовать языки программирования, отличные от своего основного
  14. 14. Но к Ruby я вернулся Ruby · Golang · JavaScript
  15. 15. Но к Ruby я вернулся Ruby · Golang · JavaScript
  16. 16. Материальные свойства Ruby
  17. 17. Простота Минимум правил
  18. 18. Простота 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
  19. 19. Договоренности Код по понятиям
  20. 20. Договоренности validates_presence_of :name after_filter :send_email expect(results).to match_array(%w(foo bar))
  21. 21. Приятный, читабельный код Код для людей, не для компилятора
  22. 22. Приятный, читабельный код 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
  23. 23. Истина в Runtime
  24. 24. Истина в Runtime class User < ApplicationRecord # поля???? end vs $> rails console > User.methods => [:id, :name, :email, ...]
  25. 25. Быстрая разработка Редактирование на лету
  26. 26. Быстрая разработка $> heroku run rails console # Copy + Paste > class User def buggy_method # fixed implementation goes here end end > User.where(buggy: true).each(&:buggy_method)
  27. 27. Свойства Ruby → Простота → Договоренности → Приятный, читабельный код → Истина в Runtime → Быстрая разработка
  28. 28. Ruby · Golang · JavaScript
  29. 29. Простота + Договоренности + Быстрая разработка = Проекты, в которых логика и особенно схема данных еще не выяснены.
  30. 30. Простота + Договоренности = Интеграционные тесты (для проектов на других языках)
  31. 31. Простота + Договоренности + Runtime = Язык конфигурации для систем
  32. 32. Читабельный код + Runtime = Скрипты
  33. 33. Ruby
  34. 34. Ruby Логика и схема данных известны
  35. 35. Ruby Ограниченный технический бюджет
  36. 36. Ruby Конкурентное программирование
  37. 37. Ruby, который я люблю
  38. 38. Ruby, который я люблю cвято следует рубокопу
  39. 39. Ruby, который я люблю cвято следует рубокопу Метрики: → длина строки → длина метода → длина модуля → сложность → число аргументов
  40. 40. Ruby, который я люблю состоит из небольших модулей
  41. 41. Ruby, который я люблю состоит из небольших модулей → но только не миксинов!
  42. 42. Ruby, который я люблю использует dependency injection
  43. 43. Ruby, который я люблю использует dependency injection → Паттерн "Functional with configuration"
  44. 44. Ruby, который я люблю не хранит состояние
  45. 45. Ruby, который я люблю не хранит состояние → особенно в Rails
  46. 46. Ruby, который я люблю покрыт простыми тестами
  47. 47. Ruby, который я люблю не злоупотребляет "паттернами"
  48. 48. Ruby, который я люблю не злоупотребляет метапрограммированием
  49. 49. Ruby, который я люблю изолирует мутирующий код
  50. 50. Ruby, который я люблю хорошо документирован
  51. 51. Ruby, который я люблю хорошо документирован → манкипатчинг → хаки → "...я бы обыкновенно написал XXX, но тут такое дело, что я лучше напишу YYY..." → напиши это комментарием!
  52. 52. Ruby, который я люблю → Свято следует рубокопу → Состоит из небольших модулей → Использует dependency injection → Не использует состояния → Простые (благодаря DI) тесты → Не злоупотребляет паттернами → Не злоупотребляет метапрограммированием → Мутирующий код изолирован и легко читабелен → Манкипатчинг четко задокументирован
  53. 53. Rails, которые я люблю
  54. 54. Rails, которые я люблю Минимум кода в моделях
  55. 55. Rails, которые я люблю Минимум кода в моделях → валидаторы → жизненный цикл → ассоциации → скоупы
  56. 56. Rails, которые я люблю Минимум кода в контроллерах
  57. 57. Rails, которые я люблю Минимум кода в контроллерах → проверка параметров → генереция вивода
  58. 58. Rails, которые я люблю Бизнес-логика в модулях
  59. 59. Rails, которые я люблю Бизнес-логика в модулях → Rails - это только Web → Рулите вашим app/*!
  60. 60. Rails, которые я люблю Доступ к базе из одного места
  61. 61. 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)
  62. 62. Rails, которые я люблю Вьюха на React
  63. 63. Rails, которые я люблю Вьюха на React (то есть рельсовой вьюхи и нет) !
  64. 64. Rails, которые я люблю Тесты на RSpec
  65. 65. Rails, которые я люблю Тесты на RSpec → простые → особенно для бизнес-логики
  66. 66. Rails, которые я люблю Capybara+Chrome
  67. 67. Rails, которые я люблю Capybara+Chrome → самый "надежный" современный вариант → headless mode
  68. 68. Rails, которые я люблю → Минимум кода в моделях → Минимум кода в контроллерах → Доступ к базе из одного места → Бизнес-логика в модулях → Вьюха на React → Тесты на RSpec → Capybara+Chrome
  69. 69. Что бы я хотел в видеть в Ruby → Автоформатирование кода → Статическую типизацию
  70. 70. Спасибо! Вопросы? подписывайтесь на RSS: http://l-s.me пишите письма: leonid@shevtsov.me

×