Apresentação de pesquisa onde é feita uma revisão bibliográfica sobre a linguagem de programação Ruby e o arcabouço Ruby on Rails, os quais são utilizados para o desenvolvimento ágil de aplicações para plataforma web. Nesta são analisados diversos requisitos necessários para o desenvolvimento de aplicações eficientes e de forma produtiva.
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)
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
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)
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
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
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
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
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