Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Monografia de conclusão de curso (TCC) - Março 2007

Monografia de conclusão de curso (TCC) - Março 2007

Disponibilizado download completo, que inclui: Monografia, slides da apresentação, projeto java+struts, projeto Rails, audio da apresentação(não é a melhor gravação, mas se consegue ouvir).

Essa foi a monografia desenvolvida para conclusão do curso de Bacharelado em Sistemas de Informação que cursei na UNIRIO — Universidade Federal do Estado do Rio de Janeiro. Trata-se de um comparativo de frameworks para desenvolvimento web. Foram estudados para o comparativo os frameworks Struts e Hibernate, desenvolvidos em Java, e o framework Rails, desenvolvido em Ruby.

No comparativo não foi abordado o desenvolvimento com Struts devido a já existirem outros trabalhos acadêmicos com esse foco. Este trabalho mostra um estudo das funcionalidades que considerei mais relevantes no Rails e faz um paralelo com as equivalentes no Struts.

Para este trabalho foram desenvolvidas duas aplicações de comércio eletrônico idênticas na interface com o usuário e no banco de dados.

Monografia: http://mergulhao.info/assets/2007/5/2/monografia.pdf
Download completo: https://dl.dropbox.com/u/547141/mergulhao-info-assets/monografia.zip

Sylvestre Mergulhão

March 27, 2007
Tweet

More Decks by Sylvestre Mergulhão

Other Decks in Technology

Transcript

  1. Necessidades Desenvolver para a web Desenvolver para a web de

    forma organizada Desenvolver para a web de forma fácil de manter Desenvolver para a web de forma fácil Desenvolver para a web de forma rápida Desenvolver para a web de forma (mais formas???)
  2. Motivação n° 1 Java Muito trabalho para pouco resultado Java+Struts

    Muita(mesmo!) configuração e muito(mesmo!) trabalho para pouco resultado PHP Muita liberdade resulta em pouca organização
  3. Motivação n° 2 Comparativos encontrados na Internet de um tal

    de framework Ruby on Rails (RoR ou apenas Rails) com o Struts. Alguns chegavam a dizer num total de 10:1 em relação a quantidade de linhas de código entre um e outro, mas sem muitos detalhes. Por que não pagar pra ver?
  4. Motivação n° 3 Na verdade não paguei, recebi... pois estava

    no horário de expediente. Download e instalação de linguagem, bibliotecas, conector para o banco de dados Postgresql e o framework RoR: 1h. Desenvolvimento passo-a-passo de uma aplicação CRUD seguindo um tutorial: 1h.
  5. Ruby? Oh, quanta preciosidade... DRY. Poxa, mas por que tão

    seco? KISS. Tomara que não seja o Last. POLS: A lógica da menor surpresa. Conceitos utilizados pelo Ruby
  6. “Uma linguagem que não afeta seu jeito de pensar sobre

    programação não vale a pena aprender” Alan Jay Perlis Cientista da computação
  7. Algumas características Orientação a objetos sempre! Tipificação forte, mas dinâmica

    Atributo de classe? sempre privado... acesso só por métodos...
  8. Orientação a objetos sempre! Tudo(mesmo!) é um objeto. puts "alguma

    coisa".upcase # imprimirá "ALGUMA COISA" puts "alguma coisa".upcase # imprimirá "ALGUMA COISA"
  9. num = 81 6.times do puts "#{num.class}: #{num}" num *=

    num end num = 81 6.times do puts "#{num.class}: #{num}" num *= num end Fixnum: 81 Fixnum: 6561 Fixnum: 43046721 Bignum: 1853020188851841 Bignum: 3433683820292512484657849089281 Bignum: 11790184577738583171520872861412518665678211592275841109096961 Fixnum: 81 Fixnum: 6561 Fixnum: 43046721 Bignum: 1853020188851841 Bignum: 3433683820292512484657849089281 Bignum: 11790184577738583171520872861412518665678211592275841109096961 Tipificação forte, mas dinâmica
  10. Framework MVC 3 módulos principais: . Active Record – ORM

    . Action Controller . Action View Utiliza os mesmos conceitos do Ruby e mais um, chamado Convention over Configuration. Configuração só é necessária quando não existe padrão. O framework Rails
  11. Active Record: Requisição ao Banco de Dados Client.find(:first, :conditions =>

    ["login = ?","sylva"]) Client.find(:first, :conditions => ["login = ?","sylva"]) Quero buscar o cliente com login “sylva”! oh quem poderá me ajudar?
  12. Em Hibernate.... Após escrever o XML de mapeamento, gerar a

    fábrica de requisições, resgatar a sessão e outras coisas mais... package org.gula.persistence.dao; import java.util.ArrayList; import java.util.Collection; import org.gula.entity.Cliente; import org.hibernate.*; import org.hibernate.criterion.Expression; import org.gula.persistence.dao.DAOException; import org.gula.persistence.HibernateUtil; public class ClienteDAO { ... public Cliente retrieve(Cliente clientePk) throws DAOException { Cliente cliente; Session session = null; try { session = HibernateUtil.currentSession(); cliente = (Cliente) session.createCriteria(Cliente.class).add( Expression.eq( "login", clientePk.getLogin())) .uniqueResult(); HibernateUtil.closeSession (); } catch (Exception e) { throw new DAOException(e); } return cliente; } } package org.gula.persistence.dao; import java.util.ArrayList; import java.util.Collection; import org.gula.entity.Cliente; import org.hibernate.*; import org.hibernate.criterion.Expression; import org.gula.persistence.dao.DAOException; import org.gula.persistence.HibernateUtil; public class ClienteDAO { ... public Cliente retrieve(Cliente clientePk) throws DAOException { Cliente cliente; Session session = null; try { session = HibernateUtil.currentSession(); cliente = (Cliente) session.createCriteria(Cliente.class).add( Expression.eq( "login", clientePk.getLogin())) .uniqueResult(); HibernateUtil.closeSession (); } catch (Exception e) { throw new DAOException(e); } return cliente; } }
  13. Beans? Pra que feijões? Validação do modelo, não do formulário...

    class Product < ActiveRecord::Base belongs_to :category belongs_to :manufacturer validates_uniqueness_of :nome validates_presence_of :nome validates_presence_of :category_id validates_presence_of :manufacturer_id validates_numericality_of :preco validates_numericality_of :estoque ... end class Product < ActiveRecord::Base belongs_to :category belongs_to :manufacturer validates_uniqueness_of :nome validates_presence_of :nome validates_presence_of :category_id validates_presence_of :manufacturer_id validates_numericality_of :preco validates_numericality_of :estoque ... end
  14. O que foi desenvolvido? Foram desenvolvidas duas aplicações muito semelhantes

    na interface e que utilizam a mesma base de dados. As duas possuem as mesmas funcionalidades e operam da mesma forma do ponto de vista do usuário. Uma foi desenvolvida em Java+Struts+Hibernate. A outra em Ruby on Rails.
  15. Número de linhas de código Linhas 681 Java 3854 Ruby

    0 500 1000 1500 2000 2500 3000 3500 4000 4500 Java Ruby Relação de 1:5,66
  16. Número de arquivos de código 0 5 10 15 20

    25 30 35 40 45 50 Java Ruby Relação de 1:1,833 Arquivos 24 Java 44 Ruby
  17. Linhas RHTML 500 JSP 875 Número de linhas de templates

    0 100 200 300 400 500 600 700 800 900 1000 JSP RHTML Relação de 1:1,75
  18. Arquivos RHTML 25 JSP 26 Número de arquivos de template

    0 5 10 15 20 25 30 JSP RHTML Quase a mesma relação
  19. Número de linhas em arquivos de configuração Linhas YAML 18

    XML 273 0 50 100 150 200 250 300 XML YAML Linhas YAML 18 XML 273 Vale a pena calcular essa relação? Apenas para manter a apresentação em conformidade: 1:15. PS: Nas 18 linhas YAML estão configurados 3 bancos: devel, test e prod.
  20. O trabalho buscou mais que ser um simples comparativo de

    linhas de código. Na pequena aplicação desenvolvida, o Rails mostrou como a lógica de sua implementação deixa as coisas mais simplificadas para os desenvolvedores.
  21. “Ruby on Rails: porque programação não precisa ser entediante.” Fabio

    Akita Programador Java O futuro é livre. Open your minds.