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

[RubyConf 2016] Como funciona o Rails

Flavia Fortes
September 23, 2016

[RubyConf 2016] Como funciona o Rails

RubyConf Brasil 2016

Flavia Fortes

September 23, 2016
Tweet

More Decks by Flavia Fortes

Other Decks in Programming

Transcript

  1. Flavia Fortes
    @flafortes

    View full-size slide

  2. http://plataformatec.workable.com

    View full-size slide

  3. Como funciona o
    Rails?

    View full-size slide

  4. ou: o que
    aprendi no
    restaurante do
    DHH

    View full-size slide

  5. Ruby
    Yukihiro Matsumoto

    View full-size slide

  6. gem install rails
    • ActiveSupport
    • ActionView
    • ActionPack
    • ActiveModel
    • ActiveRecord
    • ActiveJob
    • ActionMailer
    • ActionCable
    • Railties

    View full-size slide

  7. A doutrina do Rails

    View full-size slide

  8. http://rubyonrails.org/doctrine/

    View full-size slide

  9. A doutrina do Rails
    • Otimizar para a felicidade dos programadores
    • Convenção sobre configuração
    • O menu é omakase
    • Sem paradigmas específicos
    • Exaltar código elegante
    • Fornecer facas afiadas
    • Valorizar sistemas integrados
    • Progresso sobre estabilidade
    • Acolher sob uma grande tenda

    View full-size slide

  10. A doutrina do Rails
    • Otimizar para a felicidade dos programadores
    • Convenção sobre configuração
    • O menu é omakase
    • Sem paradigmas específicos
    • Exaltar código elegante
    • Fornecer facas afiadas
    • Valorizar sistemas integrados
    • Progresso sobre estabilidade
    • Acolher sob uma grande tenda

    View full-size slide

  11. A doutrina do Rails
    • Otimizar para a felicidade dos programadores
    • Convenção sobre configuração
    • O menu é omakase
    • Sem paradigmas específicos
    • Exaltar código elegante
    • Fornecer facas afiadas
    • Valorizar sistemas integrados
    • Progresso sobre estabilidade
    • Acolher sob uma grande tenda

    View full-size slide

  12. A doutrina do Rails
    • Otimizar para a felicidade dos programadores
    • Convenção sobre configuração
    • O menu é omakase
    • Sem paradigmas específicos
    • Exaltar código elegante
    • Fornecer facas afiadas
    • Valorizar sistemas integrados
    • Progresso sobre estabilidade
    • Acolher sob uma grande tenda

    View full-size slide

  13. A doutrina do Rails
    • Otimizar para a felicidade dos programadores
    • Convenção sobre configuração
    • O menu é omakase
    • Sem paradigmas específicos
    • Exaltar código elegante
    • Fornecer facas afiadas
    • Valorizar sistemas integrados
    • Progresso sobre estabilidade
    • Acolher sob uma grande tenda

    View full-size slide

  14. A doutrina do Rails
    • Otimizar para a felicidade dos programadores
    • Convenção sobre configuração
    • O menu é omakase
    • Sem paradigmas específicos
    • Exaltar código elegante
    • Fornecer facas afiadas
    • Valorizar sistemas integrados
    • Progresso sobre estabilidade
    • Acolher sob uma grande tenda

    View full-size slide

  15. • Otimizar para a felicidade dos programadores

    View full-size slide

  16. • O método `first` do ActiveRecord

    View full-size slide

  17. • O método `second` do ActiveRecord

    View full-size slide

  18. • O método `forty_two` do ActiveRecord

    View full-size slide

  19. • A classe`HashWithIndifferentAccess` do ActiveSupport

    View full-size slide

  20. • Hash no Ruby:

    View full-size slide

  21. • Hash no Ruby:

    View full-size slide

  22. • A classe`HashWithIndifferentAccess` do ActiveSupport

    View full-size slide

  23. • A classe`HashWithIndifferentAccess` do ActiveSupport

    View full-size slide

  24. • O módulo ActiveSupport::Inflector

    View full-size slide

  25. • O módulo ActiveSupport::NumberHelper

    View full-size slide

  26. Rails ou Ruby?
    • Rails ou Ruby Quiz - http://railshurts.com/quiz/

    View full-size slide

  27. Rails ou Ruby?

    View full-size slide

  28. Rails ou Ruby?

    View full-size slide

  29. Rails ou Ruby?

    View full-size slide

  30. A doutrina do Rails
    • Convenção sobre Configuração

    View full-size slide

  31. Nomenclatura
    Table: orders
    Class: Order
    File: /app/models/order.rb
    Primary Key: id
    Foreign Key: customer_id

    View full-size slide

  32. O padrão MVC

    View full-size slide

  33. #alerta-polêmica
    • Onde eu coloco integrações com serviços
    externos?

    View full-size slide

  34. #alerta-polêmica

    View full-size slide

  35. Convenções > Configurações
    !=
    Convenção SEM configuração

    View full-size slide

  36. http://guides.rubyonrails.org/configuring.html

    View full-size slide

  37. A doutrina do Rails
    • O menu é omakase

    View full-size slide

  38. Migrations
    • Rails foi o primeiro framework a adotar Migrations e Schema

    View full-size slide

  39. Coffee Script

    View full-size slide

  40. • Asset Pipeline

    View full-size slide

  41. • Concatena e “minifica” ou comprime JS e CSS
    Asset Pipeline

    View full-size slide

  42. • Concatena e “minifica” ou comprime JS e CSS
    • Implementado pela gem Sprockets
    Asset Pipeline

    View full-size slide

  43. • Concatena e “minifica” ou comprime JS e CSS
    • Implementado pela gem Sprockets
    • Reduz o número de requests que um browser
    precisa fazer para renderizar uma página
    Asset Pipeline

    View full-size slide

  44. http://guides.rubyonrails.org/asset_pipeline.html
    Asset Pipeline

    View full-size slide

  45. A doutrina do Rails
    • Fornecer facas afiadas

    View full-size slide

  46. • O poder de sobrescrever ou adicionar classes e
    métodos ou módulos.
    Monkey Patching

    View full-size slide

  47. http://www.justinweiss.com/articles/3-ways-to-monkey-patch-without-making-a-mess/
    Monkey Patching

    View full-size slide

  48. • Módulo utilitário do ActiveSupport que permite o
    compartilhamento de código entre modelos.
    Concerns

    View full-size slide

  49. Concerns
    http://shipit.resultadosdigitais.com.br/blog/utilizando-concerns-em-rails/

    View full-size slide

  50. • Por que tantas pessoas reclamam?
    Concerns

    View full-size slide

  51. • Não é um conceito fácil de entender, pode e,
    provavelmente, vai ser usado de forma equivocada
    Concerns

    View full-size slide

  52. • Não é um conceito fácil de entender, pode e,
    provavelmente, vai ser usado de forma equivocada
    • Seu mau uso pode adicionar mais complexidade
    ao código em vez de simplicidade e legibilidade
    Concerns

    View full-size slide

  53. • Não é um conceito fácil de entender, pode e,
    provavelmente, vai ser usado de forma equivocada
    • Seu mau uso pode adicionar mais complexidade
    ao código em vez de simplicidade e legibilidade
    • Além disso, pode gerar uma arquitetura desconexa
    e confusa
    Concerns

    View full-size slide

  54. https://signalvnoise.com/posts/3372-put-chubby-models-on-a-diet-with-concerns
    Concerns

    View full-size slide

  55. N+1
    • Silver bullet -> Eager loading

    View full-size slide

  56. N+1
    • Post.all -> Post.all.includes(:author)

    View full-size slide

  57. • "N+1 is a feature.”
    - DHH

    View full-size slide

  58. N+1
    • Eager loading significa fazer menos queries, porém
    mais complexas, que podem demandar mais do
    seu banco de dados

    View full-size slide

  59. N+1
    • Então qual é a proposta do DHH?

    View full-size slide

  60. N+1
    • Cache

    View full-size slide

  61. N+1
    • Com cache e com eager loading

    View full-size slide

  62. N+1
    • Com cache e sem eager loading

    View full-size slide

  63. N+1
    https://rossta.net/blog/n+1-is-a-rails-feature.html

    View full-size slide

  64. A doutrina do Rails
    • Acolher sob uma grande tenda

    View full-size slide

  65. DHH vs Rspec

    View full-size slide

  66. Prototype
    • JQuery virou a lib javascript default a partir do
    Rails 3.1

    View full-size slide

  67. Prototype
    http://weblog.rubyonrails.org/2011/4/21/jquery-new-default/

    View full-size slide

  68. Opções do `Rails new`
    • --skip-gemfile # Don't create a Gemfile
    • --skip-active-record # Skip Active Record files
    • --skip-sprockets # Skip Sprockets files
    • --skip-spring # Don't install Spring application preloader
    • --database=DATABASE # Preconfigure for selected database
    • --javascript=JAVASCRIPT # Preconfigure for selected JavaScript library
    • --skip-turbolinks # Skip turbolinks gem
    • --skip-test-unit # Skip Test::Unit files

    View full-size slide

  69. Opções do `Rails new`
    rails new MyNewApp --skip-sprockets —skip-active-record

    View full-size slide

  70. Código de Conduta
    http://contributor-covenant.org/

    View full-size slide

  71. Código de Conduta

    View full-size slide

  72. Já sei tudo de Rails?

    View full-size slide