Agenda
Ruby Rails Enterprise on Rails Dextra on Rails Mais informao Desenvolvimento gil com Rails
www.dextra.com.br
Infra-estrutura de TI
www.dextra.com.br
Sobre a Dextra
Dextra Sistemas
Empresa de TI com sede em Campinas Fundada em 1995 Atua intensamente com tecnologias de Software Livre
reas de atuao
Desenvolvimento de Sistemas Consultoria em
Arquitetura e Integrao de Sistemas Software Livre
Agenda
Ruby Rails Enterprise on Rails Dextra on Rails Mais informao Desenvolvimento gil com Rails
www.dextra.com.br
O que Ruby
Linguagem de programao
Dinmica e interpretada (como Perl e Python) Orientada a Objetos (como SmallTalk, Java e C#)
Mas, em Ruby, tudo objeto (1.next = 2)
Open Source
www.dextra.com.br
O que Ruby
Fonte: OReilly Radar (http://radar.oreilly.com)
www.dextra.com.br
Por qu Ruby
Caractersticas de dinamismo da linguagem
Duck typing: usa assinaturas de mtodos, no herana de classe
Se nada como um pato e grasna como um pato, ento um pato!
Classes abertas todas as classes! Reflexo (com sintaxe natural, sem APIs desajeitadas) Closures (blocos de cdigo) Mixins (mdulos)
Resumo da pera: Cdigo mais expressivo menos linhas de cdigo, Menos linhas de cdigo menos bugs!
www.dextra.com.br
JRuby
Implementao de Ruby 100% Java
Charles Nutter e Thomas Enebo (criadores) contratados pela Sun
Total apoio da Sun ao JRuby
Known issues
Incompatibilidade no suporte a threads Continuations ainda no implementado www.dextra.com.br
Agenda
Ruby Rails Enterprise on Rails Dextra on Rails Mais informao Desenvolvimento gil com Rails
www.dextra.com.br
O que Rails
Framework para desenvolvimento de aplicaes Web baseadas em banco de dados
Alta produtividade de desenvolvimento e manuteno Framework completo para o padro Model-View-Controller Biblioteca de mapeamento Objeto-Relacional Aplicaes totalmente desenvolvidas em Ruby
Desde o Ajax na camada view, passando pelas aes no controller, at o modelo de domnio e o acesso ao banco de dados.
Open Source
www.dextra.com.br
Por qu Rails
Menos cdigo
Requer menos linhas de cdigo que os outros frameworks gastam apenas com arquivos de configurao XML
Por qu Rails
Rails e o padro MVC
Model: ActiveRecord
Mantm o relacionamento entre objetos e o banco de dados responsvel por: validaes, associaes, transaes, etc.
View: ActionView
Templates HTML com scripts Ruby in-line (como JSP, ASP, PHP, etc.) Suporte a AJAX de fcil utilizao
Controller: ActionController
Aes so mapeadas por reflexo a mtodos no controller Suporte para: filtros, layouts, caching, sesses de usurio, etc. URLs so tipicamente na forma /controller/action
www.dextra.com.br
Por qu Rails
Convention over Configuration: Model
class Weblog < ActiveRecord::Base ... end class Post < ActiveRecord::Base belongs_to :weblog ... end
E no banco de dados:
CREATE TABLE weblogs (id INTEGER PRIMARY KEY, ...); CREATE TABLE posts ( id INTEGER PRIMARY KEY..., weblog_id INTEGER, ... );
www.dextra.com.br
Por qu Rails
class Weblog < ActiveRecord::Base ... end class Post < ActiveRecord::Base belongs_to :weblog ... end
CREATE TABLE weblogs (id INTEGER PRIMARY KEY, ...); CREATE TABLE posts ( id INTEGER PRIMARY KEY..., weblog_id INTEGER, ... );
www.dextra.com.br
Por qu Rails
Convention over Configuration: Controller e View
class WeblogController < ActionController::Base ... def list_entries; ... @entries = ...; end ... end
weblog/list_entries.rhtml
<h1>Entries...</h1> <table> <% for entry in @entries %> <tr><td><%= entry.feed.title+": "+entry.title %></td></tr> <tr><td><%= entry.body %></td></tr> <% end %> </table>
www.dextra.com.br
Por qu Rails
class WeblogController < ActionController::Base ... def list_entries; ... @entries = ...; end ... end
weblog/list_entries.rhtml
<h1>Entries...</h1> <table> <% for entry in @entries %> <tr><td><%= entry.feed.title+": "+entry.title %></td></tr> <tr><td><%= entry.body %></td></tr> <% end %> </table>
www.dextra.com.br
Por qu Rails
class WeblogController < ActionController::Base ... def list_entries; ... @entries = ...; end ... end
weblog/list_entries.rhtml
<h1>Entries...</h1> <table> <% for entry in @entries %> <tr><td><%= entry.feed.title+": "+entry.title %></td></tr> <tr><td><%= entry.body %></td></tr> <% end %> </table>
www.dextra.com.br
Por qu Rails
Mapeamento de URLs
ActionController::Routing::Routes.draw do |map| map.connect 'dextra/is/friendly', :controller => :feeds, :action => :list map.connect '', :controller => :feeds, :action => :list # Default Route map.connect ':controller/:action/:id' end
www.dextra.com.br
Por qu Rails
Mapeamento de URLs
ActionController::Routing::Routes.draw do |map| map.connect 'dextra/is/friendly', :controller => :feeds, :action => :list map.connect '', :controller => :feeds, :action => :list # Default Route map.connect ':controller/:action/:id' end
http://localhost/dextra/is/friendly
Chama mtodo list do controller FeedsController
www.dextra.com.br
Por qu Rails
Mapeamento de URLs
ActionController::Routing::Routes.draw do |map| map.connect 'dextra/is/friendly', :controller => :feeds, :action => :list map.connect '', :controller => :feeds, :action => :list # Default Route map.connect ':controller/:action/:id' end
http://localhost/
Chama mtodo list do controller FeedsController
www.dextra.com.br
Por qu Rails
Mapeamento de URLs
ActionController::Routing::Routes.draw do |map| map.connect 'dextra/is/friendly', :controller => :feeds, :action => :list map.connect '', :controller => :feeds, :action => :list # Default Route map.connect ':controller/:action/:id' end
http://localhost/feeds/list
Chama mtodo list do controller FeedsController
www.dextra.com.br
Por qu Rails
Queries
def Entry.recent(count) Entry.find :all, :order =>'created_on DESC', :limit => count, :include => [:feed] end def Entry.after(date) Entry.find :all, :conditions => ['created_on >= ?', date], :order => 'created_on DESC', :include => [:feed] end def Entry.before(date) Entry.find_by_sql ["select e.* from entries e where created_on < ?", date] end
www.dextra.com.br
Por qu Rails
Queries
def Entry.recent(count) Entry.find :all, :order =>'created_on DESC', :limit => count, :include => [:feed] end def Entry.after(date) Entry.find :all, :conditions => ['created_on >= ?', date], :order => 'created_on DESC', :include => [:feed] end def Entry.before(date) Entry.find_by_sql ["select e.* from entries e where created_on < ?", date] end
www.dextra.com.br
Por qu Rails
Queries
def Entry.recent(count) Entry.find :all, :order =>'created_on DESC', :limit => count, :include => [:feed] end def Entry.after(date) Entry.find :all, :conditions => ['created_on >= ?', date], :order => 'created_on DESC', :include => [:feed] end def Entry.before(date) Entry.find_by_sql ["select e.* from entries e where created_on < ?", date] end
www.dextra.com.br
Por qu Rails
Queries
def Entry.recent(count) Entry.find :all, :order =>'created_on DESC', :limit => count, :include => [:feed] end def Entry.after(date) Entry.find :all, :conditions => ['created_on >= ?', date], :order => 'created_on DESC', :include => [:feed] end def Entry.before(date) Entry.find_by_sql ["select e.* from entries e where created_on < ?", date] end
www.dextra.com.br
Agenda
Ruby Rails Enterprise on Rails Dextra on Rails Mais informao Desenvolvimento gil com Rails
www.dextra.com.br
Enterprise on Rails
Rails se destaca em uma rea de desenvolvimento:
Aplicaes Web baseadas em banco de dados
Atualmente, qual a porcentagem do desenvolvimento de aplicaes se enquadra nesta categoria?
excelente para
Aplicaes Web de pequeno a mdio porte com metas muito agressivas de time-to-market Aplicaes Web com grandes possibilidades de alterao/evoluo Aplicaes Web 2.0 que fazem uso extensivo de AJAX e/ou REST APIs soft layer sobre sistemas transacionais corporativos
www.dextra.com.br
Enterprise on Rails
Produtividade e baixo custo de desenvolvimento
Alguns casos famosos demonstram uma diminuio de 10:1 ou mais no nmero de linhas de cdigo comparado a Java EE (incluindo XMLs)
EJB 3.0 com annotations est mudando um pouco esta relao, mas...
Apresenta vantagens parecidas a linguagens 4GL, mas sem recorrer a gerao de cdigo
Baixo custo de manuteno
Enterprise on Rails
Servidores de produo
Apache
CGI mod_ruby Fastcgi
Mongrel
Para testes
Webrick (includo na distribuio)
No futuro
Servidores de aplicao Java EE: Glass Fish, JBoss, etc.
www.dextra.com.br
Enterprise on Rails
A pulga atrs da orelha...
Escalabilidade?
Caractersticas muito semelhantes plataforma LAMP, escalabilidade provada: Linux, Apache, banco de dados, Perl/Python/PHP
Alta-disponibilidade
Linux LVS, etc.
Transaes distribudas
Voc realmente precisa?
Que mais?
Enterprise on Rails
Algumas aplicaes comerciais (famosas) em Rails
Basecamp (http://www.basecamphq.com/) 43 Things (http://43things.com/) Ta-Da Lists (http://tadalists.com/) Snowdevil (http://www.snowdevil.ca/) Bellybutton (http://www.bellybutton.de/) Backpack (http://www.backpackit.com/) ...
www.dextra.com.br
Agenda
Ruby Rails Enterprise on Rails Dextra on Rails Mais informao Desenvolvimento gil com Rails
www.dextra.com.br
www.dextra.com.br
Estratgia de adoo
Verificar a curva de aprendizado
Preparar algumas pessoas chaves
Agenda
O que e por qu Ruby? O que e por qu Rails? Enterprise on Rails Dextra on Rails Mais informao Desenvolvimento gil com Rails
www.dextra.com.br
Mais informao
Ruby
Site principal: http://www.ruby-lang.org/en/ One-Click Ruby Installer for Windows
http://rubyinstaller.rubyforge.org/
www.dextra.com.br
Mais informao
Rails
Site principal: http://www.rubyonrails.org/ Tutorial (srie com 2 partes)
http://www.onlamp.com/pub/a/onlamp/2005/01/20/rails.html http://www.onlamp.com/pub/a/onlamp/2005/03/03/rails.html http://www.pragmaticprogrammer.com/titles/rails/ http://www.onlamp.com/pub/a/onlamp/2005/06/09/rails_ajax. html
www.dextra.com.br
Agenda
Ruby Rails Enterprise on Rails Dextra on Rails Mais informao Desenvolvimento gil com Rails
www.dextra.com.br
www.dextra.com.br
Mo na massa!
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
Rails tem suporte sofisticado para testes unitrios Criando a tabela de testes
$ mysqladmin -u root create pm_test $ rake db:test:clone_structure
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
Por default, cada ao renderizada por um template action.rhtml contido no diretrio models. O principal do desenvolvimento Rails envolve modificar estes arquivos com cdigo customizado
Transformar o front-end bsico para o banco de dados na aplicao propriamente dita.
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br
Perguntas?
www.dextra.com.br
www.dextra.com.br
www.dextra.com.br