programação web aula 8 - rails (introdução) · mvc rails básico rails - as partes...
TRANSCRIPT
MVC Rails Básico Rails - As partes
Programação WebAula 8 - Rails (Introdução)
Bruno Müller Junior
Departamento de Informática
UFPR
7 de Abril de 2014
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
1 Rails BásicoMágicaPrincípiosCaracterísticasCriando uma aplicação
Levantando o ServidorExaminando o diretório padrão
2 Rails - As partesControlador
Analisando o funcionamentoMudando de uma controller#view para outro
ModelosCriando um modeloDesvendando o Mistério: (1) O modeloDesvendando o Mistério: (2) O Controlador
Desvendando o Mistério: (4) As variáveisDesvendando o Mistério: (4) As variáveis
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
MVC
MVC = Model-View-Controller
Trygave Reensraug, 1978-1979, Smalltalk.
Ele observou que em um mesmo arquivo fonte, havia códigopara:
a interação com o usuário (view);acesso e consistência a dados (model);�uxo de execução (controller).
Isto di�cultava manutenção (componentes muito conexos).
Solução encontrada: dividir física e logicamente estas trêspartes.
o termo framework MVC refere-se a aplicativos dedesenvolvimento que atendem a especi�cação acima.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Rails Básico
Grande parte das ferramentas de desenvolvimento web usaalgum MVC. Rails é um destes.�Ciclo de interação com o usuário�:
o usuário interage com o navegador, enviando uma requisiçãoao servidor.o controlador capta esta requisição, consulta o modelo, erenderiza um novo documento que é enviado de volta.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Mágica
Mágica
O framework Rails faz muitas coisas �automagicamente� para odesenvolvedor. Isto ajuda só depois de saber a �mágica�.
Cria classes de controlador;
Conecta os métodos do controlador às respectivas views;
Provê a interface básica para lidar com o banco de dados;
Cria classes e bd para o modelo;utiliza convenções de nome para conectar modelo, controladore views implicitamente.
por exemplo: o controlador pode detectar valores nos dadosdos form, colocá-las em variáveis de instância que �camimplicitamente disponíveis para o código Ruby.
facilita a criação de layouts;
contém ambiente(s) de testes;
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Princípios
Princípios
DRY (Don't Repeat Yourself)
Cada elemento de informação deve aparecer uma única vez(minimiza memória).Com isto, alteraçõs ao código são altamente localizadas.
Convention over Con�guration
A maior parte da interação entre as partes é implícita, eestabelecida por convenções e não por arquivos decon�guração. Exemplo: nome da classe e nome da tabela.
Paradigma Agile Development
Desenvolvimento rápido ao invés de criação de documentoselaborados que culminam no aplicativo.Abordagem incremental.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Características
Características
Diferente de muitos outros frameworks, Rails não usainterfaces grá�cas, mas linhas de comando.
Desenvolvido especi�camente para desenvolver aplicações Webque usam banco de dados relacional.
Bibliogra�a:
Existe MUITO material na Web e em livros;A abordagem é muito parecida, e repletos de mágica. Istodi�culta a compreensão do núcleo do framework, poisconcentra-se nas �beiradas�.Nossa abordagem explica o funcionamento do framework.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Criando uma aplicação
Criando uma aplicação
Para criar uma aplicação, usa-se a linha de comando:
Para criar a raiz de uma aplicação rails:> rails new Exemplo �skip-bundle;
o �skip-bundle pede para não executar o programa bundle,responsável por incluir as �gemas�.
Isto criar um diretório com o nome Teste.
Atualize as �gemas�
Veja seus subdiretórios e as �gemas�> cd Teste> bundle install --local> ls -l> less Gemfile
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Levantando o Servidor
Levantando o Servidor
O diretório Teste é a raiz da aplicação que já pode respondera uma requisição Web.
A partir da raiz, �levantamos� o servidor:> rails server
Observe que o comando rails foi usado com outro parâmetro(server no lugar de new). Vão aparecer muitos outros ainda.
A porta padrão é 3000, mas outra pode ser usada com-p<porta>
O servidor foi levantado e como não temos nenhum modelo ouview especi�cado, a resposta padrão será renderizada.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Examinando o diretório padrão
Examinando o diretório padrão
Inicialmente vamos nos concentrar somente no diretório app,cujos subdiretórios incluem models, views e controllers.
Normalmente, <navegador> localhost:3000 resolve.
A litorina é máquina de estudos, e não tem navegadorinstalado. Tem de abrir navegador em outra máquina do dinf eabrir a url litorina:3000 (com o servidor levantado, claro)
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Rails - As partes
Os próximos slides mostram a criação de uma aplicação Rails.
Baseia-se no livro Agile Web Development with Rails 4
A diferença aqui é vamos nos concetrar em entender como aspartes MVC interagem, e não no deslumbramento dasfacilidades que ele traz.
Para as próximas transparências, tenha em mente a �gura abaixo:
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Controlador
Controlador
Sua função é receber requisições, interagir com o BD erenderizar as páginas de resposta.
Criação de um controlador> rails generate controller Say hello goodbye
Este comando cria vários arquivos, dentre os quaisdestacamos:
app/controllers/say_controller.rb
app/views/say
app/views/say/hello.html.erb
config/routes (altera).
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Analisando o funcionamento
Analisando o funcionamento
isto cria a url /say/hello e /say/goodbye.
veri�car o app/controllers/say_controller.rb.
veri�car o diretório app/views/say/.
veri�car o config/routes.rb + comando rake routes (a�cola� ou �mágica� que liga controlador à view).
controlador é usado para acessar BD (ou informaçõesexternas);
view é usada para mostrar estas informações.
incluir @time = Time.now no controlador hello;
<%= @time %> na view hello.
A �vida� de uma variável de instância é de somente umainteração.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Mudando de uma controller#view para outro
Mudando de uma controller#view para outro
Compare a view �say/hello� com o arquivo �hello.html.erb�.
O primeiro, só html. O segundo permite incluir comandos rubycom <%= <comando ruby> %>.
Alguns comandos ruby são chamados helper methods.
Alguns destes são �geradores� para HTML.
Exemplo: <%= link_to "Goodbye", say_goodbye_path %>
Existem vários helper methods padrão. Veja alguns emhttp://api.rubyonrails.org/classes/ActionView/
Helpers/UrlHelper.html
Con�ra o mapeamento (e outras formas de chamar - linkacima)
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Modelos
Modelos
Sua função é interagir com os dados. Não só buscar no BD,mas também fazer consistências.Para este exemplo, criaremos outra aplicação, e a criação deum modelo é através do comando
> rails new depot> cd depot> rails generate scaffold <Tabela> <atributos>
Ele também cria as view básicas para visualizar, incluir, excluire alterar.
Ele não cria a tabela, mas sim cria o �schema�. Para criar atabela, é necessário executar o comando rake db:migrate.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Criando um modelo
Criando um modelo
Criar a tabela �products�, com três atributos:>rails generate scaffold Product title:string description:text \image_url:string price:decimal
xaEste comando cria um monte de arquivos. Iremos abordarsomente alguns.Um arquivo importante é criada a �migração�, ou seja, um�schema� de criação desta tabela e seus atributos.con�ra no diretório db/migrate, com um timestamp.O programador pode alterar características dos atributos lá edepois criar a tabela com o comando rake db:migrate.Também pode voltar atrás e desfazer a tabela com rake
db:rollback.Ao levantar o servidor, tudo funciona.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Desvendando o Mistério: (1) O modelo
Desvendando o Mistério: (1) O modelo
Há uma padronização de nomes entre classes e tabelas.
O diretório app/models contém o arquivo �product.rb�.Este arquivo contém a classe Product.Como a migração criou a tabela products, todos os atributosda tabela são mapeados para a classe implicitamente.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Desvendando o Mistério: (2) O Controlador
Desvendando o Mistério: (2) O Controlador
O controlador deve ler a tabela e mapear os atributos parauma variável de instância, no caso, @products ou @product
dependendo da url.
Para entender como,
rake routes
Veja o arquivoapp/controllers/products_controller.rb.Por �m, observe as urls de cada requisição.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Desvendando o Mistério: (3) As Views
Desvendando o Mistério: (3) As Views
As view criadas estão no diretórioapp/views/<controlador>/.
Neste caso, app/views/products/?> lsedit.html.erb index.html.erb new.html.erb show.json.jbuilder_form.html.erb index.json.jbuilder show.html.erb
Cada uma delas é acessada com url diferente. Con�ra comrake routes.
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Desvendando o Mistério: (4) As variáveis
Desvendando o Mistério: (4) As variáveis
Primeiro, como as variáveis são usadas para gerar páginasdinâmicas.
Considere a página gerada com index.
Controller carrega todos os produtos no método index. Nestecaso, @products = Product.all.
View: a variável products é usada em comandos ruby (entre<% ... %>).
Já a página gerada com show tem um truque:usa um mesmo método (set_product para aplicar @product= Product.find(params[:id]).Após a de�nição da classe, tembefore_action :set_product, only: [:show, :edit,
:update, :destroy]
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)
MVC Rails Básico Rails - As partes
Desvendando o Mistério: (4) As variáveis
Desvendando o Mistério: (4) As variáveis
A pergunta que não quer calar: de onde veio o parâmetro id?
Em rails, os parâmetros são armazenados na hash params docontrolador (não é visível fora do controlador). Independe seveio como POST ou GET.
Outro caso é um novo produto:
Veja o fonte da página de new.O campo de título: name="product[title]".O botão de criação dispara o método create no controlador.Este, por sua vez usa product_params (um atalho para todosos campos de params).http://guides.rubyonrails.org/action_controller_
overview.html#parameters
Bruno Müller Junior Departamento de Informática UFPR
Programação Web Aula 8 - Rails (Introdução)