SlideShare uma empresa Scribd logo
1 de 44
Baixar para ler offline
Ruby	
  on	
  Rails:	
  Um	
  estudo	
  de	
  viabilidade	
  
        em	
  ambientes	
  empresariais	
  
                  Trabalho	
  de	
  Conclusão	
  de	
  Curso	
  


               Aluno:	
  Rodrigo	
  de	
  Jesus	
  Recio	
  
           Professor	
  Orientador:	
  Rodrigo	
  Assira@	
  Dias	
  



         Fundação	
  Armando	
  Alvares	
  Penteado	
  -­‐	
  FAAP	
  
           Faculdade	
  de	
  Computação	
  e	
  Informá@ca	
  
Problema	
  
•  O	
  arcabouço	
  Ruby	
  on	
  Rails	
  é	
  maduro	
  para	
  a	
  
   u@lização	
  no	
  desenvolvimento	
  de	
  aplicações	
  
   corpora@vas?	
  
•  Quais	
  suas	
  vantagens	
  em	
  comparação	
  a	
  
   seus	
  concorrentes?	
  
Obje@vo	
  
•  Ajudar	
  na	
  escolha	
  de	
  um	
  arcabouço	
  para	
  
   desenvolvimento	
  de	
  aplicações	
  web	
  
•  Comparar	
  a	
  linguagem	
  e	
  o	
  arcabouço	
  com	
  
   seus	
  principais	
  concorrentes	
  no	
  mercado	
  
•  Analisar	
  aspectos	
  como	
  produ@vidade,	
  
   confiabilidade	
  e	
  desempenho	
  	
  	
  
Agenda	
  
•  A	
  linguagem	
  Ruby	
  
•  O	
  arcabouço	
  Ruby	
  on	
  Rails	
  
    –  Arquitetura	
  
    –  Convenções	
  
A	
  Linguagem	
  Ruby	
  
•  Uma	
  linguagem	
  de	
  programação	
  interpretada	
  
•  Idealizada	
  em	
  1993	
  por	
  Yukihiro	
  Matsumoto	
  
•  Baseada	
  no	
  Python	
  e	
  Perl	
  
•  Suporta	
  múl@plos	
  paradigmas	
  de	
  
   programação:	
  funcional,	
  orientado	
  a	
  objetos,	
  
   impera@vo	
  e	
  reflexivo	
  
•  Possui	
  sistema	
  de	
  @pos	
  dinâmico	
  
Ruby	
  on	
  Rails	
  
•  Arcabouço	
  que	
  permite	
  desenvolver	
  
   aplicações	
  web	
  apoiadas	
  por	
  banco	
  de	
  dados	
  
•  Suporta	
  proto@pação	
  de	
  componentes	
  
   através	
  de	
  geradores	
  de	
  código	
  
•  Favorece	
  convenção	
  no	
  lugar	
  de	
  configuração	
  
Ruby	
  on	
  Rails	
  
•  Possui	
  mecanismo	
  de	
  persistência	
  e	
  
   mapeamento	
  objeto-­‐relacional	
  
•  Possui	
  sistema	
  de	
  gerenciamento	
  de	
  versões	
  
   de	
  bancos	
  de	
  dados	
  
•  É	
  baseado	
  na	
  arquitetura	
  Modelo-­‐Visão-­‐
   Controlador	
  (MVC)	
  
Componentes	
  
•  Ac@ve	
  Record	
  (Modelo)	
  
•  Ac@on	
  Pack	
  
   –  Ac@on	
  Controller	
  (Controlador)	
  
   –  Ac@on	
  View	
  (Visão)	
  
•  Ac@on	
  Mailer	
  
•  Ac@ve	
  Support	
  (estende	
  bibliotecas	
  da	
  
   linguagem	
  Ruby)	
  
Arquitetura	
  MVC	
  




   Rails	
  e	
  MVC	
  
Convenções	
  
Nomeação	
  de	
  Modelo	
  
Tabela	
                                  produtos	
  
Arquivo	
                                 app/models/produto.rb	
  
Classe	
                                  Produto	
  

Nomeação	
  de	
  Controlador	
  
URL	
                                     hfp://endereco.com/loja/listar	
  
Arquivo	
                                 app/controllers/loja_controller.rb	
  
Classe	
                                  LojaController	
  
Método	
  (ação)	
                        listar	
  

Nomeação	
  de	
  Visão	
  
URL	
                                     hfp://endereco.com/loja/listar	
  
Arquivo	
                                 app/views/loja/listar.html.erb	
  
Agenda	
  
•    Ac@ve	
  Record	
  
•    Ac@on	
  Pack	
  
•    Migra@ons	
  
•    Segurança	
  
Ac@ve	
  Record	
  
•  Componente	
  usado	
  na	
  camada	
  de	
  Modelo	
  
   (MVC)	
  
•  Mecanismo	
  de	
  persistência	
  e	
  mapeamento	
  
   objeto-­‐relacional	
  
•  Alterna@va	
  ao	
  modelo	
  de	
  programação	
  
   centrada	
  de	
  banco	
  de	
  dados	
  
Exemplo	
  de	
  programação	
  centrada	
  de	
  
                      BD	
  
Exemplo	
  de	
  classe	
  modelo	
  referente	
  a	
  
  tabela	
  com	
  as	
  colunas	
  nome	
  e	
  id	
  




         Exemplo	
  de	
  u@lização	
  
Ac@on	
  Pack	
  
•  Gerencia	
  recepção	
  de	
  solicitações	
  (ação	
  a	
  ser	
  
   executada)	
  do	
  navegador	
  e	
  a	
  resposta	
  (página	
  
   a	
  ser	
  visualizada)	
  correspondente	
  
•  Componente	
  usado	
  nas	
  camadas	
  Controlador	
  
   e	
  Visão	
  
•  Controlador	
  é	
  implementado	
  através	
  de	
  
   subclasse	
  de	
  Ac#onController::Base	
  
•  Visão	
  implementada	
  através	
  de	
  Embedded	
  
   Ruby	
  (ERB)	
  
Exemplo:	
  Controlador	
  e	
  Visão	
  
URL:	
  hfp://exemplo.com/blog/index	
  
Migra@ons	
  
•  Mecanismo	
  de	
  versão	
  de	
  banco	
  de	
  dados	
  
•  Uma	
  subclasse	
  de	
  Ac#veRecord::Migra#on	
  
   define	
  como	
  fazer	
  e	
  desfazer	
  alterações	
  em	
  
   um	
  schema	
  de	
  banco	
  de	
  dados	
  
•  Cada	
  versão	
  do	
  banco	
  tem	
  um	
  migra@on	
  
   correspondente	
  
•  É	
  possível	
  alternar	
  entre	
  versões	
  de	
  banco	
  
   usando	
  o	
  comando	
  rake	
  db:migrate	
  
   VERSION=XXXX	
  	
  
Segurança	
  

Possíveis	
  Vulnerabilidades	
  e	
  
     Melhores	
  Prá@cas	
  
Segurança:	
  Sessão	
  
•  Chave	
  de	
  sessão	
  é	
  armazenada	
  em	
  um	
  cookie	
  
   no	
  navegador	
  
•  Cifrada	
  usando	
  HMAC	
  a	
  par@r	
  de	
  uma	
  chave	
  
   secreta	
  e	
  os	
  dados	
  armazenados	
  na	
  sessão	
  
•  Recomendado	
  chave	
  secreta	
  grande,	
  Rails	
  
   u@liza	
  30	
  caracteres	
  
Segurança:	
  Sessão	
  
•  Não	
  é	
  indicado	
  armazenar	
  dados	
  importantes	
  
   na	
  sessão	
  
•  É	
  indicado	
  u@lizar	
  a	
  chave	
  da	
  sessão	
  do	
  
   usuário	
  para	
  iden@ficação	
  e	
  armazenar	
  os	
  
   dados	
  no	
  lado	
  do	
  servidor	
  
•  É	
  recomendado	
  reiniciar	
  sessão	
  após	
  usuário	
  
   efetuar	
  logout	
  
Possível	
  vulnerabilidade:	
  	
  
            Cross-­‐Site	
  Scrip@ng	
  (XSS)	
  
•  Inserção	
  de	
  código	
  HTML	
  ou	
  JavaScript	
  
   por	
  usuários	
  maliciosos	
  em	
  páginas	
  vistas	
  
   por	
  outros	
  usuários	
  
XSS	
  -­‐	
  Prevenção	
  
•  No	
  caso	
  onde	
  o	
  usuário	
  não	
  pode	
  inserir	
  
   nenhum	
  código	
  HTML,	
  usar	
  o	
  método	
  “h
   (string)”	
  para	
  filtrar	
  cada	
  entrada	
  do	
  usuário	
  e	
  
   remover	
  código	
  HTML	
  
XSS	
  -­‐	
  Prevenção	
  
•  No	
  caso	
  onde	
  HTML	
  é	
  permi@do	
  como	
  
   entrada,	
  mas	
  não	
  JavaScript,	
  u@lizar	
  o	
  método	
  
   “sani@ze(string)”:	
  




•  Filtra	
  códigos	
  maliciosos	
  em	
  unicode,	
  ascii	
  e	
  
   hexadecimal	
  
Agenda	
  -­‐	
  Desenvolvimento	
  
•    Ruby	
  versus	
  Outras	
  Linguagens	
  
•    Ac@ve	
  Record	
  versus	
  Hibernate	
  
•    Ac@on	
  Pack	
  versus	
  JavaServer	
  Faces	
  
•    Conclusão	
  
Ruby	
  vs	
  outras	
  linguagens	
  
Ruby	
  versus	
  	
  
                     Outras	
  Linguagens	
  
•  Baseado	
  no	
  estudo	
  An	
  Empirical	
  Comparison	
  
   of	
  C,	
  C++,	
  Java,	
  Perl,	
  Python,	
  Rexx	
  and	
  Tcl	
  de	
  
   Lutz	
  Prechelt	
  que	
  dividiu	
  as	
  linguagens	
  nos	
  
   grupos	
  script	
  e	
  não	
  script	
  e	
  o	
  ar@go	
  C++,	
  Java,	
  
   Python	
  versus	
  Ruby	
  de	
  David	
  Howard	
  
Resultado	
  
•  Linguagens	
  interpretadas	
  tendem	
  a	
  ter	
  um	
  
   ciclo	
  de	
  desenvolvimento	
  mais	
  rápido	
  
•  Java	
  é	
  bem	
  mais	
  rápido	
  que	
  Ruby	
  
•  Sistema	
  de	
  @pos	
  dinâmico	
  de	
  Ruby	
  
   proporciona	
  maior	
  produ@vidade	
  porém	
  
   aumenta	
  o	
  risco	
  de	
  ocorrer	
  uma	
  exceção	
  em	
  
   tempo	
  de	
  execução	
  
Resultados	
  
•  O	
  sistema	
  de	
  @pos	
  está@co	
  de	
  Java	
  
   proporciona	
  um	
  código	
  mais	
  confiável	
  porém	
  
   diminui	
  a	
  produ@vidade	
  
•  Ruby	
  tem	
  um	
  consumo	
  de	
  memória	
  bem	
  
   menor	
  que	
  Java	
  
Ac@ve	
  Record	
  	
  
   versus	
  
 Hibernate	
  
Ac@ve	
  Record	
  vs.	
  Hibernate	
  
•  Gerador	
  de	
  código	
  do	
  Rails	
  permite	
  
   proto@pação	
  do	
  modelo	
  e	
  de	
  um	
  Migra#on	
  
   referente	
  a	
  este	
  modelo	
  
Modelo	
  e	
  migra@on	
  gerados	
  
Modelo	
  equivalente	
  em	
  Java	
  
•  Devem	
  ser	
  implementados	
  manualmente	
  a	
  classe	
  
   Modelo	
  e	
  arquivo	
  XML	
  de	
  mapeamento	
  com	
  o	
  banco	
  
Mapeamento	
  XML	
  do	
  Hibernate	
  
Armazenando	
  dados	
  

Ac8ve	
  Record	
          Hibernate	
  
Resultado	
  
Vantagens	
                                  Desvantagens	
  
•  O	
  gerador	
  de	
  código	
  do	
    •  Não	
  ter	
  uma	
  representação	
  
   Rails	
  permite	
  um	
                   do	
  modelo	
  relacional	
  na	
  
   desenvolvimento	
  mais	
  veloz	
         classe	
  Modelo	
  pode	
  tornar-­‐
•  Não	
  é	
  necessário	
  escrever	
       se	
  uma	
  dificuldade	
  em	
  
   códigos	
  que	
  representam	
  os	
      projetos	
  mais	
  complexos,	
  
   atributos	
  na	
  classe	
  Modelo	
      onde	
  existam	
  algumas	
  
                                              centenas	
  de	
  tabelas	
  e	
  
                                              colunas	
  no	
  banco	
  de	
  dados	
  
Ac@on	
  Pack	
  
     versus	
  
JavaServer	
  Faces	
  
JavaServer	
  Faces	
  (Controlador)	
  
•  Ações	
  e	
  condições	
  de	
  acionamento	
  devem	
  ser	
  
   especificadas	
  manualmente	
  no	
  arquivo	
  faces-­‐
   config.xml:	
  	
  
Ac@on	
  Pack:	
  Ac@on	
  Controller	
  
                 (Controlador)	
  
•  Ações	
  são	
  definidas	
  no	
  arquivo	
  config/
   routes.rb	
  de	
  forma	
  mais	
  abrangente	
  
   (convenção	
  no	
  lugar	
  de	
  configuração):	
  
Ac@on	
  Pack:	
  Ac@on	
  View	
  (Visão)	
  
•  Camada	
  de	
  visão	
  implementada	
  em	
  
   Embedded	
  Ruby	
  (ERB),	
  exemplo:	
  
JavaServer	
  Faces	
  
•  U@liza	
  
   elementos	
  de	
  
   marcação	
  
   está@ca	
  similar	
  
   ao	
  HTML:	
  
Resultado	
  
Vantagens	
                                    Desvantagens	
  

•  Configuração	
  das	
  ações	
  do	
   •  Não	
  possui	
  uma	
  sintaxe	
  de	
  
   Rails	
  pode	
  ser	
  feita	
  de	
  forma	
   marcação	
  está@ca	
  similar	
  ao	
  
   mais	
  fácil	
  e	
  flexível	
                  HTML	
  
Conclusão	
  
•  Ruby	
  acelera	
  o	
  desenvolvimento	
  e	
  aumenta	
  a	
  
   produ@vidade	
  
•  Ac@ve	
  Record	
  é	
  mais	
  produ@vo	
  em	
  projetos	
  
   simples	
  mas	
  pode	
  tornar-­‐se	
  mais	
  trabalhoso	
  
   em	
  projetos	
  mais	
  complexos	
  
•  O	
  Rails	
  permite	
  gerenciar	
  de	
  forma	
  controlada	
  
   as	
  alterações	
  de	
  banco	
  de	
  dados	
  
   proporcionando	
  mais	
  organização	
  e	
  
   flexibilidade	
  ao	
  desenvolvimento	
  
Conclusão	
  
•  JavaServer	
  Faces	
  possui	
  uma	
  sintaxe	
  mais	
  
   clara	
  e	
  fácil	
  de	
  manter	
  na	
  camada	
  de	
  Visão	
  do	
  
   que	
  o	
  Rails	
  que	
  mescla	
  código	
  Ruby	
  com	
  
   HTML	
  
•  O	
  Rails	
  não	
  é	
  a	
  prova	
  de	
  falhas,	
  porém	
  é	
  
   possível	
  prevenir	
  contra	
  possíveis	
  
   vulnerabilidades	
  de	
  segurança	
  
Ruby	
  on	
  Rails:	
  Um	
  estudo	
  de	
  viabilidade	
  
        em	
  ambientes	
  empresariais	
  
                  Trabalho	
  de	
  Conclusão	
  de	
  Curso	
  


               Aluno:	
  Rodrigo	
  de	
  Jesus	
  Recio	
  
           Professor	
  Orientador:	
  Rodrigo	
  Assira@	
  Dias	
  



         Fundação	
  Armando	
  Alvares	
  Penteado	
  -­‐	
  FAAP	
  
           Faculdade	
  de	
  Computação	
  e	
  Informá@ca	
  

Mais conteúdo relacionado

Mais procurados

Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPSérgio Vilar
 
Fundamentos do asp.net
Fundamentos do asp.netFundamentos do asp.net
Fundamentos do asp.netleojr_0
 
Criando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCriando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCOTIC-PROEG (UFPA)
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAThiago Cifani
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on RailsCJR, UnB
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endMario Guedes
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipseFilipe Bezerra Sousa
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpRodrigo Aramburu
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...BrunoSouza617
 
Netbeans 6.7: a única IDE que você precisa!
Netbeans 6.7: a única IDE que você precisa!Netbeans 6.7: a única IDE que você precisa!
Netbeans 6.7: a única IDE que você precisa!João Longo
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsEmerson Soares
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Flávio Lisboa
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Kelver Merlotti
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ BuilderDiego Rosa
 
Introducao ao Ruby On Rails
Introducao ao Ruby On RailsIntroducao ao Ruby On Rails
Introducao ao Ruby On RailsAndre Ferraro
 

Mais procurados (20)

Desenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHPDesenvolvimento Web com CakePHP
Desenvolvimento Web com CakePHP
 
Rails na pratica
Rails na praticaRails na pratica
Rails na pratica
 
Fundamentos do asp.net
Fundamentos do asp.netFundamentos do asp.net
Fundamentos do asp.net
 
Security & PHP
Security & PHPSecurity & PHP
Security & PHP
 
Criando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on railsCriando uma aplicação simples com ruby on rails
Criando uma aplicação simples com ruby on rails
 
Palestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVAPalestra Desenvolvimento Ágil para Web com ROR UVA
Palestra Desenvolvimento Ágil para Web com ROR UVA
 
Curso de Ruby on Rails
Curso de Ruby on RailsCurso de Ruby on Rails
Curso de Ruby on Rails
 
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-endModularização via BPL - Abordagem Prática para DataSnap & Front-end
Modularização via BPL - Abordagem Prática para DataSnap & Front-end
 
Programação em java linguagem, ap is, boas práticas e eclipse
Programação em java   linguagem, ap is, boas práticas e eclipseProgramação em java   linguagem, ap is, boas práticas e eclipse
Programação em java linguagem, ap is, boas práticas e eclipse
 
1213 java
1213 java1213 java
1213 java
 
Desenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephpDesenvolvendo aplicações web com o framework cakephp
Desenvolvendo aplicações web com o framework cakephp
 
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
Symfony Live - São Paulo 2019 - Como construir uma API em um passo com API Pl...
 
Netbeans 6.7: a única IDE que você precisa!
Netbeans 6.7: a única IDE que você precisa!Netbeans 6.7: a única IDE que você precisa!
Netbeans 6.7: a única IDE que você precisa!
 
CakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no WindowsCakePHP - Configurando o ambiente de desenvolvimento no Windows
CakePHP - Configurando o ambiente de desenvolvimento no Windows
 
Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011Palestra Zend Framework na Campus Party 2011
Palestra Zend Framework na Campus Party 2011
 
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
Datasnap avançado - Respostas para um sistema robusto - Embarcadero Conferenc...
 
Estudos Technocorp
Estudos TechnocorpEstudos Technocorp
Estudos Technocorp
 
Ruby on rails
Ruby on railsRuby on rails
Ruby on rails
 
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
Introdução FireDACAcesso multi-banco para Delphi e C++ BuilderIntrodução FireDACAcesso multi-banco para Delphi e C++ Builder
Introdução FireDAC Acesso multi-banco para Delphi e C++ Builder
 
Introducao ao Ruby On Rails
Introducao ao Ruby On RailsIntroducao ao Ruby On Rails
Introducao ao Ruby On Rails
 

Semelhante a Ruby on Rails: um estudo de viabilidade em ambientes empresariais

Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperCesar Romero
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edtedbrunoaalves
 
Ruby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkRuby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkGuilherme Carlos
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.Filipe Morelli
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Maurício Linhares
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Douglas Roeder
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPelliando dias
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPArlindo Santos
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHPPaulo Dayvson
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorAllyson Barros
 
Técnicas de Programação para a Web
Técnicas de Programação para a WebTécnicas de Programação para a Web
Técnicas de Programação para a WebLuiz Cláudio Silva
 

Semelhante a Ruby on Rails: um estudo de viabilidade em ambientes empresariais (20)

Ruby on Rails
Ruby on RailsRuby on Rails
Ruby on Rails
 
Desenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack DeveloperDesenvolvendo Sistema Cloud e Web Full-stack Developer
Desenvolvendo Sistema Cloud e Web Full-stack Developer
 
Palestra ror edted
Palestra ror edtedPalestra ror edted
Palestra ror edted
 
Ruby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao FrameworkRuby on Rails - Introdução ao Framework
Ruby on Rails - Introdução ao Framework
 
Ruby & Rails
Ruby & RailsRuby & Rails
Ruby & Rails
 
Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0Ruby on Rails for beginners 2.0
Ruby on Rails for beginners 2.0
 
Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3Introdução Ruby 1.8.7 + Rails 3
Introdução Ruby 1.8.7 + Rails 3
 
Oficial
OficialOficial
Oficial
 
Cake PHP
Cake PHPCake PHP
Cake PHP
 
NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.NodeJS - Tutorial de forma simples e pratica.
NodeJS - Tutorial de forma simples e pratica.
 
Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01Curso de Ruby on Rails - Aula 01
Curso de Ruby on Rails - Aula 01
 
Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01Palestra Ruby on Rails SETA 2008/01
Palestra Ruby on Rails SETA 2008/01
 
Aula 1 apresentação
Aula 1   apresentaçãoAula 1   apresentação
Aula 1 apresentação
 
Desenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHPDesenvolvimento Web Avançado usando PHP
Desenvolvimento Web Avançado usando PHP
 
Curso HTML 5 - Aula Inicial
Curso HTML 5 - Aula InicialCurso HTML 5 - Aula Inicial
Curso HTML 5 - Aula Inicial
 
Cakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHPCakephp - framework de desenvolvimento de aplicações Web em PHP
Cakephp - framework de desenvolvimento de aplicações Web em PHP
 
Comandos gerais do PHP
Comandos gerais do PHPComandos gerais do PHP
Comandos gerais do PHP
 
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem DorPlay Framework - Desenvolvendo Aplicações Web com Java sem Dor
Play Framework - Desenvolvendo Aplicações Web com Java sem Dor
 
Técnicas de Programação para a Web
Técnicas de Programação para a WebTécnicas de Programação para a Web
Técnicas de Programação para a Web
 
Palestra ASP.NET MVC
Palestra ASP.NET MVCPalestra ASP.NET MVC
Palestra ASP.NET MVC
 

Ruby on Rails: um estudo de viabilidade em ambientes empresariais

  • 1. Ruby  on  Rails:  Um  estudo  de  viabilidade   em  ambientes  empresariais   Trabalho  de  Conclusão  de  Curso   Aluno:  Rodrigo  de  Jesus  Recio   Professor  Orientador:  Rodrigo  Assira@  Dias   Fundação  Armando  Alvares  Penteado  -­‐  FAAP   Faculdade  de  Computação  e  Informá@ca  
  • 2. Problema   •  O  arcabouço  Ruby  on  Rails  é  maduro  para  a   u@lização  no  desenvolvimento  de  aplicações   corpora@vas?   •  Quais  suas  vantagens  em  comparação  a   seus  concorrentes?  
  • 3. Obje@vo   •  Ajudar  na  escolha  de  um  arcabouço  para   desenvolvimento  de  aplicações  web   •  Comparar  a  linguagem  e  o  arcabouço  com   seus  principais  concorrentes  no  mercado   •  Analisar  aspectos  como  produ@vidade,   confiabilidade  e  desempenho      
  • 4. Agenda   •  A  linguagem  Ruby   •  O  arcabouço  Ruby  on  Rails   –  Arquitetura   –  Convenções  
  • 5. A  Linguagem  Ruby   •  Uma  linguagem  de  programação  interpretada   •  Idealizada  em  1993  por  Yukihiro  Matsumoto   •  Baseada  no  Python  e  Perl   •  Suporta  múl@plos  paradigmas  de   programação:  funcional,  orientado  a  objetos,   impera@vo  e  reflexivo   •  Possui  sistema  de  @pos  dinâmico  
  • 6. Ruby  on  Rails   •  Arcabouço  que  permite  desenvolver   aplicações  web  apoiadas  por  banco  de  dados   •  Suporta  proto@pação  de  componentes   através  de  geradores  de  código   •  Favorece  convenção  no  lugar  de  configuração  
  • 7. Ruby  on  Rails   •  Possui  mecanismo  de  persistência  e   mapeamento  objeto-­‐relacional   •  Possui  sistema  de  gerenciamento  de  versões   de  bancos  de  dados   •  É  baseado  na  arquitetura  Modelo-­‐Visão-­‐ Controlador  (MVC)  
  • 8. Componentes   •  Ac@ve  Record  (Modelo)   •  Ac@on  Pack   –  Ac@on  Controller  (Controlador)   –  Ac@on  View  (Visão)   •  Ac@on  Mailer   •  Ac@ve  Support  (estende  bibliotecas  da   linguagem  Ruby)  
  • 9. Arquitetura  MVC   Rails  e  MVC  
  • 10. Convenções   Nomeação  de  Modelo   Tabela   produtos   Arquivo   app/models/produto.rb   Classe   Produto   Nomeação  de  Controlador   URL   hfp://endereco.com/loja/listar   Arquivo   app/controllers/loja_controller.rb   Classe   LojaController   Método  (ação)   listar   Nomeação  de  Visão   URL   hfp://endereco.com/loja/listar   Arquivo   app/views/loja/listar.html.erb  
  • 11. Agenda   •  Ac@ve  Record   •  Ac@on  Pack   •  Migra@ons   •  Segurança  
  • 12. Ac@ve  Record   •  Componente  usado  na  camada  de  Modelo   (MVC)   •  Mecanismo  de  persistência  e  mapeamento   objeto-­‐relacional   •  Alterna@va  ao  modelo  de  programação   centrada  de  banco  de  dados  
  • 13. Exemplo  de  programação  centrada  de   BD  
  • 14. Exemplo  de  classe  modelo  referente  a   tabela  com  as  colunas  nome  e  id   Exemplo  de  u@lização  
  • 15. Ac@on  Pack   •  Gerencia  recepção  de  solicitações  (ação  a  ser   executada)  do  navegador  e  a  resposta  (página   a  ser  visualizada)  correspondente   •  Componente  usado  nas  camadas  Controlador   e  Visão   •  Controlador  é  implementado  através  de   subclasse  de  Ac#onController::Base   •  Visão  implementada  através  de  Embedded   Ruby  (ERB)  
  • 16. Exemplo:  Controlador  e  Visão   URL:  hfp://exemplo.com/blog/index  
  • 17. Migra@ons   •  Mecanismo  de  versão  de  banco  de  dados   •  Uma  subclasse  de  Ac#veRecord::Migra#on   define  como  fazer  e  desfazer  alterações  em   um  schema  de  banco  de  dados   •  Cada  versão  do  banco  tem  um  migra@on   correspondente   •  É  possível  alternar  entre  versões  de  banco   usando  o  comando  rake  db:migrate   VERSION=XXXX    
  • 18. Segurança   Possíveis  Vulnerabilidades  e   Melhores  Prá@cas  
  • 19. Segurança:  Sessão   •  Chave  de  sessão  é  armazenada  em  um  cookie   no  navegador   •  Cifrada  usando  HMAC  a  par@r  de  uma  chave   secreta  e  os  dados  armazenados  na  sessão   •  Recomendado  chave  secreta  grande,  Rails   u@liza  30  caracteres  
  • 20. Segurança:  Sessão   •  Não  é  indicado  armazenar  dados  importantes   na  sessão   •  É  indicado  u@lizar  a  chave  da  sessão  do   usuário  para  iden@ficação  e  armazenar  os   dados  no  lado  do  servidor   •  É  recomendado  reiniciar  sessão  após  usuário   efetuar  logout  
  • 21. Possível  vulnerabilidade:     Cross-­‐Site  Scrip@ng  (XSS)   •  Inserção  de  código  HTML  ou  JavaScript   por  usuários  maliciosos  em  páginas  vistas   por  outros  usuários  
  • 22. XSS  -­‐  Prevenção   •  No  caso  onde  o  usuário  não  pode  inserir   nenhum  código  HTML,  usar  o  método  “h (string)”  para  filtrar  cada  entrada  do  usuário  e   remover  código  HTML  
  • 23. XSS  -­‐  Prevenção   •  No  caso  onde  HTML  é  permi@do  como   entrada,  mas  não  JavaScript,  u@lizar  o  método   “sani@ze(string)”:   •  Filtra  códigos  maliciosos  em  unicode,  ascii  e   hexadecimal  
  • 24. Agenda  -­‐  Desenvolvimento   •  Ruby  versus  Outras  Linguagens   •  Ac@ve  Record  versus  Hibernate   •  Ac@on  Pack  versus  JavaServer  Faces   •  Conclusão  
  • 25. Ruby  vs  outras  linguagens  
  • 26. Ruby  versus     Outras  Linguagens   •  Baseado  no  estudo  An  Empirical  Comparison   of  C,  C++,  Java,  Perl,  Python,  Rexx  and  Tcl  de   Lutz  Prechelt  que  dividiu  as  linguagens  nos   grupos  script  e  não  script  e  o  ar@go  C++,  Java,   Python  versus  Ruby  de  David  Howard  
  • 27. Resultado   •  Linguagens  interpretadas  tendem  a  ter  um   ciclo  de  desenvolvimento  mais  rápido   •  Java  é  bem  mais  rápido  que  Ruby   •  Sistema  de  @pos  dinâmico  de  Ruby   proporciona  maior  produ@vidade  porém   aumenta  o  risco  de  ocorrer  uma  exceção  em   tempo  de  execução  
  • 28. Resultados   •  O  sistema  de  @pos  está@co  de  Java   proporciona  um  código  mais  confiável  porém   diminui  a  produ@vidade   •  Ruby  tem  um  consumo  de  memória  bem   menor  que  Java  
  • 29. Ac@ve  Record     versus   Hibernate  
  • 30. Ac@ve  Record  vs.  Hibernate   •  Gerador  de  código  do  Rails  permite   proto@pação  do  modelo  e  de  um  Migra#on   referente  a  este  modelo  
  • 31. Modelo  e  migra@on  gerados  
  • 32. Modelo  equivalente  em  Java   •  Devem  ser  implementados  manualmente  a  classe   Modelo  e  arquivo  XML  de  mapeamento  com  o  banco  
  • 33. Mapeamento  XML  do  Hibernate  
  • 34. Armazenando  dados   Ac8ve  Record   Hibernate  
  • 35. Resultado   Vantagens   Desvantagens   •  O  gerador  de  código  do   •  Não  ter  uma  representação   Rails  permite  um   do  modelo  relacional  na   desenvolvimento  mais  veloz   classe  Modelo  pode  tornar-­‐ •  Não  é  necessário  escrever   se  uma  dificuldade  em   códigos  que  representam  os   projetos  mais  complexos,   atributos  na  classe  Modelo   onde  existam  algumas   centenas  de  tabelas  e   colunas  no  banco  de  dados  
  • 36. Ac@on  Pack   versus   JavaServer  Faces  
  • 37. JavaServer  Faces  (Controlador)   •  Ações  e  condições  de  acionamento  devem  ser   especificadas  manualmente  no  arquivo  faces-­‐ config.xml:    
  • 38. Ac@on  Pack:  Ac@on  Controller   (Controlador)   •  Ações  são  definidas  no  arquivo  config/ routes.rb  de  forma  mais  abrangente   (convenção  no  lugar  de  configuração):  
  • 39. Ac@on  Pack:  Ac@on  View  (Visão)   •  Camada  de  visão  implementada  em   Embedded  Ruby  (ERB),  exemplo:  
  • 40. JavaServer  Faces   •  U@liza   elementos  de   marcação   está@ca  similar   ao  HTML:  
  • 41. Resultado   Vantagens   Desvantagens   •  Configuração  das  ações  do   •  Não  possui  uma  sintaxe  de   Rails  pode  ser  feita  de  forma   marcação  está@ca  similar  ao   mais  fácil  e  flexível   HTML  
  • 42. Conclusão   •  Ruby  acelera  o  desenvolvimento  e  aumenta  a   produ@vidade   •  Ac@ve  Record  é  mais  produ@vo  em  projetos   simples  mas  pode  tornar-­‐se  mais  trabalhoso   em  projetos  mais  complexos   •  O  Rails  permite  gerenciar  de  forma  controlada   as  alterações  de  banco  de  dados   proporcionando  mais  organização  e   flexibilidade  ao  desenvolvimento  
  • 43. Conclusão   •  JavaServer  Faces  possui  uma  sintaxe  mais   clara  e  fácil  de  manter  na  camada  de  Visão  do   que  o  Rails  que  mescla  código  Ruby  com   HTML   •  O  Rails  não  é  a  prova  de  falhas,  porém  é   possível  prevenir  contra  possíveis   vulnerabilidades  de  segurança  
  • 44. Ruby  on  Rails:  Um  estudo  de  viabilidade   em  ambientes  empresariais   Trabalho  de  Conclusão  de  Curso   Aluno:  Rodrigo  de  Jesus  Recio   Professor  Orientador:  Rodrigo  Assira@  Dias   Fundação  Armando  Alvares  Penteado  -­‐  FAAP   Faculdade  de  Computação  e  Informá@ca