SlideShare uma empresa Scribd logo
1 de 61
Porque você deveria considerar Ruby on Rails para seu próximo projeto ?



                          anderson leite
anderson leite
anderson.leite@caelum.com.br
  www.andersonleite.com.br
      @anderson_leite
Porque você deveria   CONSIDERAR ...




      para seu próximo projeto ?
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html
"Precisamos de algumas
idéias malucas, vejam só para
   onde as idéias normais nos
                    levaram."

             -- George Bernard Shaw
Vamos começar
tomando algumas
decisões erradas.
Dick Fosbury
Dick Fosbury
Agile web development with Rails
Mas...Ruby on Rails faz
#{qualquer_coisa_mirabolante_aqui} ?
Mas...Ruby on Rails faz
#{qualquer_coisa_mirabolante_aqui} ?

            NÃO ?! HA!
Mas...Ruby on Rails faz
#{qualquer_coisa_mirabolante_aqui} ?

             NÃO ?! HA!

   “Tornar as coisas simples ...fáceis
   e as coisas complexas ...possíveis”
class Carro

end
class Carro

end
class Carro   carro = Carro.new
              carro.turbo
end           NoMethodError: undefined method ‘turbo’
class Carro              carro = Carro.new
                         carro.turbo
end                      NoMethodError: undefined method ‘turbo’



class Oficina
  def turbina(carro)
    def carro.turbo
     puts ‘turbinado!’
     end
    end
end
class Carro              carro = Carro.new
                         carro.turbo
end                      NoMethodError: undefined method ‘turbo’



class Oficina
  def turbina(carro)
    def carro.turbo
     puts ‘turbinado!’
     end
    end
end
class Carro              carro = Carro.new
                         carro.turbo
end                      NoMethodError: undefined method ‘turbo’



class Oficina                       carro = Carro.new
  def turbina(carro)               oficina = Oficina.new
    def carro.turbo                oficina.turbina(carro)
     puts ‘turbinado!’
     end                           carro.turbo
    end                            # turbinado!
end
Metaprogramação

class Carro              carro = Carro.new
                         carro.turbo
end                      NoMethodError: undefined method ‘turbo’



class Oficina                       carro = Carro.new
  def turbina(carro)               oficina = Oficina.new
    def carro.turbo                oficina.turbina(carro)
     puts ‘turbinado!’
     end                           carro.turbo
    end                            # turbinado!
end
class Carro

end
class Carro

end
class Carro
class Carro     def method_missing(name, *args)
                  puts “Método #{name} .. ?”
end             end
              end
class Carro
class Carro           def method_missing(name, *args)
                        puts “Método #{name} .. ?”
end                   end
                    end


carro = Carro.new
carro.acelera
class Carro
class Carro           def method_missing(name, *args)
                        puts “Método #{name} .. ?”
end                   end
                    end


carro = Carro.new
carro.acelera
class Carro
class Carro           def method_missing(name, *args)
                        puts “Método #{name} .. ?”
end                   end
                    end


carro = Carro.new
carro.acelera                 # Método acelera .. ?
Method Missing

                    class Carro
class Carro           def method_missing(name, *args)
                        puts “Método #{name} .. ?”
end                   end
                    end


carro = Carro.new
carro.acelera                 # Método acelera .. ?
Metaprogramação
       +
 Method Missing
       =
Metaprogramação
          +
    Method Missing
          =
class Carro < ActiveRecord::Base
end
Metaprogramação
          +
    Method Missing
          =
class Carro < ActiveRecord::Base
end
carro = Carro.new
carro.find(2)
Metaprogramação
          +
    Method Missing
          =
class Carro < ActiveRecord::Base
end
carro = Carro.new
carro.find(2)
carro.find_by_name(‘monza’)
Metaprogramação
           +
     Method Missing
           =
class Carro < ActiveRecord::Base
end
carro = Carro.new
carro.find(2)
carro.find_by_name(‘monza’)
carro.find_by_name_and_year(‘monza’,1990)

carros = Carro.all
Documentação...
Documentação...
Documentação...
Cucumber
Live coding
TDD / BDD
TDD / BDD
Funcionalidade: Controle de venda de carros
  Para administrar minha loja e obter mais
  lucro quero controlar a entrada e saída
  de automóveis.
TDD / BDD
Funcionalidade: Controle de venda de carros
  Para administrar minha loja e obter mais
  lucro quero controlar a entrada e saída
  de automóveis.
  Cenário: Cadastro de carros
TDD / BDD
Funcionalidade: Controle de venda de carros
  Para administrar minha loja e obter mais
  lucro quero controlar a entrada e saída
  de automóveis.
  Cenário: Cadastro de carros
    Dado que estou na página inicial do sistema
TDD / BDD
Funcionalidade: Controle de venda de carros
  Para administrar minha loja e obter mais
  lucro quero controlar a entrada e saída
  de automóveis.
  Cenário: Cadastro de carros
    Dado que estou na página inicial do sistema
    E clico no link “Adicionar novo carro”
TDD / BDD
Funcionalidade: Controle de venda de carros
  Para administrar minha loja e obter mais
  lucro quero controlar a entrada e saída
  de automóveis.
  Cenário: Cadastro de carros
    Dado que estou na página inicial do sistema
    E clico no link “Adicionar novo carro”
    E preencho os campos do formulário
TDD / BDD
Funcionalidade: Controle de venda de carros
  Para administrar minha loja e obter mais
  lucro quero controlar a entrada e saída
  de automóveis.
  Cenário: Cadastro de carros
    Dado que estou na página inicial do sistema
    E clico no link “Adicionar novo carro”
    E preencho os campos do formulário
    Então o novo carro deve aparecer na home
TDD / BDD
Funcionalidade: Controle de venda de carros
  Para administrar minha loja e obter mais
  lucro quero controlar a entrada e saída
  de automóveis.
  Cenário: Cadastro de carros
    Dado que estou na página inicial do sistema
    E clico no link “Adicionar novo carro”
    E preencho os campos do formulário
    Então o novo carro deve aparecer na home
TDD / BDD
Funcionalidade: Controle de venda de carros
  Para administrar minha loja e obter mais
  lucro quero controlar a entrada e saída
  de automóveis.
  Cenário: Cadastro de carros
    Dado que estou na página inicial do sistema
    E clico no link “Adicionar novo carro”
    E preencho os campos do formulário
    Então o novo carro deve aparecer na home
http://vraptor.caelum.com.br/
usem C# e .NEt
   obrigado!
anderson.leite@caelum.com.br
  www.andersonleite.com.br
      @anderson_leite

Mais conteúdo relacionado

Semelhante a Por que considerar Ruby on Rails

[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave thisLoiane Groner
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3Jose Berardo
 
[Curso Java Basico - Orientacao a Objetos] Aula 29: Construtores e Codigo de ...
[Curso Java Basico - Orientacao a Objetos] Aula 29: Construtores e Codigo de ...[Curso Java Basico - Orientacao a Objetos] Aula 29: Construtores e Codigo de ...
[Curso Java Basico - Orientacao a Objetos] Aula 29: Construtores e Codigo de ...Loiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...Loiane Groner
 
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simplesLoiane Groner
 
Universidade Positivo - A Semente nao entendida de todas as metodologias
Universidade Positivo - A Semente nao entendida de todas as metodologiasUniversidade Positivo - A Semente nao entendida de todas as metodologias
Universidade Positivo - A Semente nao entendida de todas as metodologiasFabio Akita
 
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...Loiane Groner
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoFreedom DayMS
 
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...Loiane Groner
 
Grails from scratch
Grails from scratchGrails from scratch
Grails from scratchUFPA
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsThiago Cifani
 
Material configurável MM-SD-PP
Material configurável MM-SD-PPMaterial configurável MM-SD-PP
Material configurável MM-SD-PPEdson Domenech
 

Semelhante a Por que considerar Ruby on Rails (13)

[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
[Curso Java Basico - Orientacao a Objetos] Aula 30: Palavra chave this
 
O que há de novo no PHP 5.3
O que há de novo no PHP 5.3O que há de novo no PHP 5.3
O que há de novo no PHP 5.3
 
Aula3
Aula3Aula3
Aula3
 
[Curso Java Basico - Orientacao a Objetos] Aula 29: Construtores e Codigo de ...
[Curso Java Basico - Orientacao a Objetos] Aula 29: Construtores e Codigo de ...[Curso Java Basico - Orientacao a Objetos] Aula 29: Construtores e Codigo de ...
[Curso Java Basico - Orientacao a Objetos] Aula 29: Construtores e Codigo de ...
 
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
[Curso Java Basico - Orientacao a Objetos] Aula 26: Classes e metodos com ret...
 
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
[Curso Java Basico - Orientacao a Objetos] Aula 25: Classes e metodos simples
 
Universidade Positivo - A Semente nao entendida de todas as metodologias
Universidade Positivo - A Semente nao entendida de todas as metodologiasUniversidade Positivo - A Semente nao entendida de todas as metodologias
Universidade Positivo - A Semente nao entendida de todas as metodologias
 
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
[Curso Java Basico - Orientacao a Objetos] Aula 32: Encapsulamento: métodos g...
 
Aplicações rápidas para a Web com Django
Aplicações rápidas para a Web com DjangoAplicações rápidas para a Web com Django
Aplicações rápidas para a Web com Django
 
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
[Curso Java Basico - Orientacao a Objetos] Aula 27: Classes e metodos com par...
 
Grails from scratch
Grails from scratchGrails from scratch
Grails from scratch
 
Testes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on RailsTestes Automatizados em Ruby on Rails
Testes Automatizados em Ruby on Rails
 
Material configurável MM-SD-PP
Material configurável MM-SD-PPMaterial configurável MM-SD-PP
Material configurável MM-SD-PP
 

Por que considerar Ruby on Rails

  • 1. Porque você deveria considerar Ruby on Rails para seu próximo projeto ? anderson leite
  • 2. anderson leite anderson.leite@caelum.com.br www.andersonleite.com.br @anderson_leite
  • 3. Porque você deveria CONSIDERAR ... para seu próximo projeto ?
  • 6. "Precisamos de algumas idéias malucas, vejam só para onde as idéias normais nos levaram." -- George Bernard Shaw
  • 7.
  • 9.
  • 10.
  • 13. Agile web development with Rails
  • 14.
  • 15. Mas...Ruby on Rails faz #{qualquer_coisa_mirabolante_aqui} ?
  • 16. Mas...Ruby on Rails faz #{qualquer_coisa_mirabolante_aqui} ? NÃO ?! HA!
  • 17. Mas...Ruby on Rails faz #{qualquer_coisa_mirabolante_aqui} ? NÃO ?! HA! “Tornar as coisas simples ...fáceis e as coisas complexas ...possíveis”
  • 18.
  • 19.
  • 22. class Carro carro = Carro.new carro.turbo end NoMethodError: undefined method ‘turbo’
  • 23. class Carro carro = Carro.new carro.turbo end NoMethodError: undefined method ‘turbo’ class Oficina def turbina(carro) def carro.turbo puts ‘turbinado!’ end end end
  • 24. class Carro carro = Carro.new carro.turbo end NoMethodError: undefined method ‘turbo’ class Oficina def turbina(carro) def carro.turbo puts ‘turbinado!’ end end end
  • 25. class Carro carro = Carro.new carro.turbo end NoMethodError: undefined method ‘turbo’ class Oficina carro = Carro.new def turbina(carro) oficina = Oficina.new def carro.turbo oficina.turbina(carro) puts ‘turbinado!’ end carro.turbo end # turbinado! end
  • 26. Metaprogramação class Carro carro = Carro.new carro.turbo end NoMethodError: undefined method ‘turbo’ class Oficina carro = Carro.new def turbina(carro) oficina = Oficina.new def carro.turbo oficina.turbina(carro) puts ‘turbinado!’ end carro.turbo end # turbinado! end
  • 27.
  • 30. class Carro class Carro def method_missing(name, *args) puts “Método #{name} .. ?” end end end
  • 31. class Carro class Carro def method_missing(name, *args) puts “Método #{name} .. ?” end end end carro = Carro.new carro.acelera
  • 32. class Carro class Carro def method_missing(name, *args) puts “Método #{name} .. ?” end end end carro = Carro.new carro.acelera
  • 33. class Carro class Carro def method_missing(name, *args) puts “Método #{name} .. ?” end end end carro = Carro.new carro.acelera # Método acelera .. ?
  • 34. Method Missing class Carro class Carro def method_missing(name, *args) puts “Método #{name} .. ?” end end end carro = Carro.new carro.acelera # Método acelera .. ?
  • 35.
  • 36. Metaprogramação + Method Missing =
  • 37. Metaprogramação + Method Missing = class Carro < ActiveRecord::Base end
  • 38. Metaprogramação + Method Missing = class Carro < ActiveRecord::Base end carro = Carro.new carro.find(2)
  • 39. Metaprogramação + Method Missing = class Carro < ActiveRecord::Base end carro = Carro.new carro.find(2) carro.find_by_name(‘monza’)
  • 40. Metaprogramação + Method Missing = class Carro < ActiveRecord::Base end carro = Carro.new carro.find(2) carro.find_by_name(‘monza’) carro.find_by_name_and_year(‘monza’,1990) carros = Carro.all
  • 46. TDD / BDD Funcionalidade: Controle de venda de carros Para administrar minha loja e obter mais lucro quero controlar a entrada e saída de automóveis.
  • 47. TDD / BDD Funcionalidade: Controle de venda de carros Para administrar minha loja e obter mais lucro quero controlar a entrada e saída de automóveis. Cenário: Cadastro de carros
  • 48. TDD / BDD Funcionalidade: Controle de venda de carros Para administrar minha loja e obter mais lucro quero controlar a entrada e saída de automóveis. Cenário: Cadastro de carros Dado que estou na página inicial do sistema
  • 49. TDD / BDD Funcionalidade: Controle de venda de carros Para administrar minha loja e obter mais lucro quero controlar a entrada e saída de automóveis. Cenário: Cadastro de carros Dado que estou na página inicial do sistema E clico no link “Adicionar novo carro”
  • 50. TDD / BDD Funcionalidade: Controle de venda de carros Para administrar minha loja e obter mais lucro quero controlar a entrada e saída de automóveis. Cenário: Cadastro de carros Dado que estou na página inicial do sistema E clico no link “Adicionar novo carro” E preencho os campos do formulário
  • 51. TDD / BDD Funcionalidade: Controle de venda de carros Para administrar minha loja e obter mais lucro quero controlar a entrada e saída de automóveis. Cenário: Cadastro de carros Dado que estou na página inicial do sistema E clico no link “Adicionar novo carro” E preencho os campos do formulário Então o novo carro deve aparecer na home
  • 52. TDD / BDD Funcionalidade: Controle de venda de carros Para administrar minha loja e obter mais lucro quero controlar a entrada e saída de automóveis. Cenário: Cadastro de carros Dado que estou na página inicial do sistema E clico no link “Adicionar novo carro” E preencho os campos do formulário Então o novo carro deve aparecer na home
  • 53. TDD / BDD Funcionalidade: Controle de venda de carros Para administrar minha loja e obter mais lucro quero controlar a entrada e saída de automóveis. Cenário: Cadastro de carros Dado que estou na página inicial do sistema E clico no link “Adicionar novo carro” E preencho os campos do formulário Então o novo carro deve aparecer na home
  • 54.
  • 56.
  • 57.
  • 58.
  • 59.
  • 60.
  • 61. usem C# e .NEt obrigado! anderson.leite@caelum.com.br www.andersonleite.com.br @anderson_leite