Utilização do framework “Ruby On Rails” no desenvolvimento de um módulo Aweb RTIGO para ORIGINAL sistema / ORIGINAL de biblioteca ARTICLE Utilização do framework “Ruby On Rails” no desenvolvimento de um módulo web para sistema de biblioteca Use of “Ruby On Rails” framework in the development of a web module for library system Felipe Pierre Conter* Fabiana Frata Furlan Peres* * Universidade Estadual do Oeste do Paraná (UNIOESTE). Resumo O framework Ruby on Rails tem ganhado destaque como ferramenta para desenvolvimento web. Ele promete ser mais produtivo que outras abordagens. O seguinte trabalho, ainda em desenvolvimento, propõe utilizar o framework para o desenvolvimento de um módulo web para o Sistema de Biblioteca da UNIOESTE. Essa aplicação terá um banco de dados próprio, porém também irá manipular informações do banco de dados já em utilização do sistema atual da biblioteca. Isso nos permite explorar e analisar duas abordagens com o framework: o desenvolvimento a partir de um banco de dados vazio, que irá evoluir juntamente com a aplicação e o acesso a um banco de dados já existente. Pretende-se encontrar os pontos fracos e fortes do desenvolvimento em ambas as abordagens. Palavras-chave: Engenharia de software. Web. Frameworks. Desenvolvimento ágil. Abstract The Ruby on Rails framework has been in evidence as a web development tool. It promises to be more productive than other approaches. The following work, still under development, proposes to use the framework for the development of a web module for the Library System at the State University West of Paraná (UNIOESTE). This application will have its own database, but it will also use information from the database in use by the current library system. This allows us to explore and analyze two approaches with the framework: the development from an empty database, which will evolve together with the application and access to an already existing database. This work intends to find out the weak and strong points of the development in both approaches. Keywords: Software engineering. Web. Frameworks. Agile development. 1 Introdução O framework Ruby on Rails, também chamado de Rails ou RoR, propõe maior facilidade e rapidez no desenvolvimento e manutenção de aplicações web. Outra importante característica deste framework é que ele disponibiliza suporte às novas tecnologias existentes na rede, como Ajax e interfaces RESTful, favorecendo sua popularização e destaque como uma das principais ferramentas de desenvolvimento web. Existe uma gama de sistemas altamente complexos e funcionais que necessitam de manutenção evolutiva que podem ser feitas utilizando tecnologias mais fáceis de se utilizar (FULTON, 2005). Segundo Rangel, um desenvolvedor que utiliza este framework, com Ruby on Rails, a produtividade é maior porque se escreve menos códigos, mais eficientes. Afirma ainda que um projeto que em Java levaria 120 dias para ser produzido, com Rails é reduzido para 5 dias (SPOSITO, 2006). Neste contexto, este estudo propõe o desenvolvimento de um módulo web para um sistema de biblioteca, estendendo o acesso a informações sobre a disponibilidade do acervo, que poderão ser acessadas por meio de um website. Desta forma é possível analisar e identificar pontos fortes e fracos no desenvolvimento com essa ferramenta, com enfoque especial no acesso aos bancos de dados. 2 Fundamentação Teórica 2.1 Desenvolvimento Web A Internet evoluiu de uma rede de troca de trabalhos acadêmicos a uma rede mundial que conecta qualquer parte do mundo. Quando os aplicativos web começaram a ser desenvolvidos, existiam muitas limitações que foram sendo resolvidas. O grande diferencial da web atual, consiste na dinamicidade de aplicações, que estão em um patamar talvez até mais avançado que as aplicações desktop (ASLESON; SCHUTTA 2006). Há alguns anos, se uma aplicação cliente/servidor em desktop necessitasse de atualização, seria necessário atualizar cliente por cliente. Havendo muita dificuldade na instalação e na distribuição do software. Com os softwares na internet, em forma de sites, não é mais necessário a instalação na máquina cliente. Porém, ainda existiam alguns problemas relacionados com a “pobre” interatividade com o usuário. Muitos elementos de interatividade das aplicações CONTER, F. P.; PERES, F. F. F. / UNOPAR Cient., Ciênc. Exatas. Tecnol., Londrina, v. 6, p. 9-13, nov. 2007 9 Utilização do framework “Ruby On Rails” no desenvolvimento de um módulo web para sistema de biblioteca desktop tiveram que ser sacrificados para que fossem formatados como código HTML. A cada interação do usuário com o servidor, era preciso que o cliente aguardasse a atualização da página por inteiro. O tempo “perdido” na atualização e o tráfego desnecessário gerado pela retransmissão de elementos requisitados eram as principais barreiras que impediam o avanço das aplicações web. Muitas abordagens tentaram modificar estes entraves, como a CGI1 , os Applets e Servlets da Sun2 , o JavaScript, o Flash da Macromedia, dentre outras. Porém, poucas conseguiram se manter até hoje (ASLESON; SCHUTTA 2006). A necessidade por páginas cada vez mais dinâmicas fez com que várias tecnologias surgissem prometendo serem mais produtivas e modernas. Dentre essas tecnologias, os frameworks de aplicações web surgiram para suportar o desenvolvimento de websites dinâmicos, aplicações web e web services (interfaces para interação de aplicação a aplicação na web, intermediada normalmente por arquivos XML). Um framework web elimina algumas dificuldades associadas com atividades comuns no desenvolvimento web, por exemplo, disponibilizando recursos para facilitar o acesso ao banco de dados, criação de templates, controle de sessões e freqüentemente promovem o reuso de código em sua aplicação. 2.2 O Framework Ruby on Rails O Framework Ruby on Rails chamado simplesmente de Rails, torna mais fácil o desenvolvimento e manutenção de aplicações web. Permite ao programador menor preocupação com a configuração e com a coesão entre os elementos da aplicação, como comunicação entre as regras de negócio, o banco de dados e a página que irá para o browser do cliente. Assim o programador pode concentrar seu foco na aplicação em si (THOMAS et al., 2007). Para Walton e Hibbs (2006) o Rails mantém a curva de aprendizado baixa, permitindo facilidade e rapidez no desenvolvimento no Rails. Criado em 2004 por David Heinemeier Hansson, um desenvolvedor da empresa 37Signals3 , o Rails surgiu como a base para o desenvolvimento de uma aplicação de controle de projetos, ou seja, surgiu de um problema real na 37Signals. Foi escrito totalmente na linguagem Ruby, sendo que a linguagem padrão de desenvolvimento no framework também é o Ruby. A seguir são apresentados alguns conceitos relacionados ao Rails: - Convenção ao invés da configuração: Certos padrões de inferência entre os elementos da aplicação fazem que seja desnecessário fazer arquivos externos de configuração, como no Struts (CUNHA NETO, 2007), sendo necessário apenas definir as configurações que fogem do padrão. 1 2 3 - KISS: “Keep it simple, stupid”, ou na tradução, “deixe simples, estúpido” (CUNHA NETO, 2007). O conceito se resume em manter tudo simples de uma forma geral. Ou seja, não “reinventar a roda”. Dessa forma, é muito mais fácil identificar o que cada parte do código faz em específico. - DRY: “Don`t repeat yourself”, ou na tradução, “não se repita”. Todo o conhecimento em um sistema deve ser expresso em apenas um lugar, evitando repetição de código. O Rails leva o programador a seguir esse conceito, sendo que mudanças futuras nos requisitos de um sistema acabam tendo impacto reduzido, pois o tempo gasto nessas mudanças é menor (THOMAS et al., 2007). - Desenvolvimento Ágil: É mais importante satisfazer o cliente com a entrega mais rápida e contínua de software, de preferência numa escala de tempo pequena. Isso o encoraja a pedir mudanças no software e os problemas de identificação errônea de requisitos são identificados mais cedo. O desenvolvimento Ágil favorece “indivíduos e interações” sobre processos e ferramentas, “software funcionando” sobre documentação compreensiva, “colaboração do cliente” sobre negociação de contrato, e “responder a mudanças” sobre seguir um plano. O Rails é relacionado fortemente com o desenvolvimento Ágil, pois a empresa onde o seu desenvolvimento se iniciou é adepta dessa abordagem (HIGHSMITH, 2001). 2.3 A Arquitetura MVC – Model, View e Controller Em 1979, Trygve Reenskaug especificou uma nova arquitetura de desenvolvimento de aplicações interativas, chamada MVC. Nesta abordagem, uma aplicação é dividida em três tipos de componentes: models, views e controllers ou modelos, visões/interfaces e controladores (THOMAS et al., 2007). No Rails, as aplicações seguem a arquitetura MVC. Existe um lugar específico para cada parte de código desenvolvido. Devido ao princípio da convenção ao invés de configuração, o model, view e controller funcionam de maneira que tipicamente não é necessário definir as configurações de relacionamento entre eles. O Rails possui padrões inteligentes que fazem com que todos esses elementos se encaixem (THOMAS et al., 2007). O model é responsável por manter o estado da aplicação. O estado pode estar em transição, aguardando uma resposta do usuário ou de outras aplicações e pode ser permanente, sendo nesses casos armazenado fora da aplicação, normalmente em um banco de dados. Apesar do foco do model ser nos dados, ele também força o cumprimento de todas as regras de negócio que se aplicam àqueles dados. Por exemplo, para excluir da aplicação os usuários cadastrados que não tenham emprestado nenhum livro de uma biblioteca em 5 anos, é responsabilidade do model forçar essa (http://www.w3.org/CGI/) (http://java.sun.com/developer/onlineTraining/new2java/programming/learn/apps.html). Empresa de desenvolvimento e venda de serviços na web. 10 CONTER, F. P.; PERES, F. F. F. / UNOPAR Cient., Ciênc. Exatas. Tecnol., Londrina, v. 6, p. 9-13, nov. 2007 Utilização do framework “Ruby On Rails” no desenvolvimento de um módulo web para sistema de biblioteca restrição. Isso mantém a integridade dos dados no banco, fazendo com que nenhuma outra parte da aplicação invalide-os (THOMAS et al., 2007). O conceito de model no Rails é desempenhado pelo Active Record, um componente responsável pela persistência (normalmente feita em um banco de dados). O Rails utiliza aqui o conceito de ORM - “Objectrelational mapping” ou mapeamento objeto-relacional. Bibliotecas ORM mapeiam tabelas para classes, sendo que as linhas dessa tabela armazenam os objetos dessa classe, com seus respectivos atributos e associações. O Active Record facilita a busca por uma informação no banco. A consulta é transparente, não sendo necessário descrever detalhes do código de acesso específico do banco de dados que se está utilizando. A aplicação fica desacoplada de um banco de dados específico, pois a lógica de acesso ao banco fica isolada da lógica de negócio. Outra facilidade provida pelo ORM do Rails é o save. Quando se deseja salvar um objeto “livro” no banco, por exemplo, basta chamar livro.save e a persistência no banco de dados é realizada (THOMAS et al., 2007). Em alguns momentos, os padrões do Active Record não são adequados ao desenvolvimento, como quando se lida com uma base de dados com um esquema legado (não compatível com a estrutura padrão do Rails). Nesses casos, o desenvolvimento com Rails pode se tornar um pouco mais custoso com relação ao tempo gasto no desenvolvimento. Nesse sentido, o acesso ao banco pode ser feito de maneira “manual”, ou seja, informando diretamente o SQL a ser executado. Outra alternativa mais inteligente, porém que demandaria um nível de conhecimento mais aprofundado sobre o framework, seria manipular as diretivas do Active Record para que ele execute exatamente aquilo que se deseja (MARSHALL; PYTEL; JON, 2007). O Rails não é uma “caixa fechada”. Todas as classes e elementos do framework estão disponíveis e escritos em Ruby. Ao executar algo, o framework interpreta não somente o código do usuário, mas também o código das classes do framework. Caso o desenvolvedor deseje alterar o código do framework, as mudanças serão interpretadas corretamente na próxima execução. O view gera a interface de usuário, normalmente baseada em dados do model. Por exemplo, deseja-se mostrar ao usuário uma lista de livros disponíveis para empréstimo no momento. A lista dos livros estará disponível no model, porém é o view quem receberá esses dados e os formatará para mostrar ao usuário. Contudo, o view apenas é responsável por colocar a lista de livros em uma interface amigável, de preferência no browser do usuário, depois o responsável por receber algum pedido de reserva do usuário por certo livro é o controller (THOMAS et al., 2007). O controller faz o papel de administrar a execução da aplicação. É ele que recebe os pedidos e as entradas de dados vindas de fora da aplicação, incluindo os dados do browser e cliente, interage com o model e disponibiliza um determinado view para o usuário (THOMAS et al., 2007). 4 Seguindo o exemplo apresentado no item anterior, quando o usuário escolhe um livro para reserva, o controller é quem recebe esse pedido. Ele “pede” o livro para o model e depois invoca um view passando os dados do livro requisitado. 3 Materiais e Métodos Foi desenvolvida uma aplicação CRUD4 em Rails com objetivo de realizar o controle de acesso dos usuários ao módulo. Estão ainda em desenvolvimento duas outras partes deste módulo: a primeira visa acessar um banco de dados já existente no sistema de controle de biblioteca da UNIOESTE com objetivo de consultar e realizar reservas ao acervo físico disponível; e a segunda tem por objetivo cadastrar e manipular o acervo digital da biblioteca. O controle de acesso por usuários tem como objetivo restringir o acesso a algumas funcionalidades da aplicação web, disponíveis apenas para o administrador da biblioteca, como o cadastro de usuários do módulo web. É também função desse módulo associar reservas de livros aos usuários cadastrados no sistema atual da biblioteca. Há um banco de dados próprio do sistema administrativo atual na biblioteca, no qual são registrados empréstimos de livros, nomes de usuários, entre outros dados pertinentes ao funcionamento da biblioteca. De fato, este módulo web irá acessar o banco de dados, somente para realização de consultas no acervo sendo que as informações geradas pelo módulo são persistidas num banco de dados definido para este módulo. Dados de empréstimos continuarão sendo responsabilidade do sistema de controle da biblioteca. A funcionalidade de consulta on-line e reservas têm por objetivo aproximar o aluno da biblioteca, por meio de uma interface web. O usuário poderá saber se o livro que ele deseja emprestar está disponível ou não, quando estará disponível e poderá inclusive reservar um livro que se encontre disponível. O módulo de reservas somente estará disponível para usuários autenticados no sistema, com conta on-line devidamente relacionada a conta no sistema de controle de bibliotecas. Dados sobre reservas serão armazenados no novo banco, podendo ser consultados pelo administrador. O sistema irá emitir um e-mail ao operador da biblioteca no surgimento de uma nova reserva, para que este efetue a mesma no sistema atual da biblioteca. Esta abordagem é adotada, num primeiro momento, com objetivo de manter a integridade da aplicação, deixando para que seja definido o serviço de comunicação entre a aplicação e o módulo web numa próxima iteração do desenvolvimento. A terceira funcionalidade do módulo tem por objetivo disponibilizar o acervo digital da biblioteca. Existem muitos trabalhos de conclusão de curso, monografias e dissertações em formato digital tendo como suporte CD’s. Sendo mais conveniente o acesso direto aos documentos digitais pela web. Atualmente a UNIOESTE possui um sistema nesse modelo, porém voltado ape- Create, Read, Update and Delete. CONTER, F. P.; PERES, F. F. F. / UNOPAR Cient., Ciênc. Exatas. Tecnol., Londrina, v. 6, p. 9-13, nov. 2007 11 Utilização do framework “Ruby On Rails” no desenvolvimento de um módulo web para sistema de biblioteca nas para teses e dissertações dos cursos de pós-graduação/mestrado oferecidos pela universidade. Para o desenvolvimento da parte de controle de acesso e cadastro ao acervo digital, foi possível utilizar várias facilidades oferecidas pelo Rails, tornando o processo de integração da aplicação com o banco de dados e a interface, uma tarefa muito simples e transparente para o desenvolvedor. No que diz respeito ao acervo físico, como os dados já se encontram cadastrados em uma base de dados ativa, o acesso será de forma diferenciada, adaptada ao esquema em que se encontram organizados os dados, sem tirar proveito de muitas das facilidades de mapeamento ao banco de dados do Rails. 4 Resultados Como resultados parciais, é perceptível maior facilidade em desenvolver com o framework, principalmente nos módulos de controle de acesso do módulo web e cadastro e acesso ao acervo digital. Eles foram feitos independentes do sistema da biblioteca, dando maior flexibilidade e possibilitando ao framework lidar com versões do esquema do banco e persistência de dados. A única exceção diz respeito ao cadastro de usuários, no qual o acesso ao banco de dados do sistema de bibliotecas se fez necessário para associar o login do usuário da rede com o código de usuário da biblioteca. Assim, será possível direcionar corretamente as reservas de livros feitas pelo módulo web. O desenvolvimento fugiu do padrão no momento em que se pensou no acesso a dados de livros e de empréstimos. No desenvolvimento desse módulo que manipula uma estrutura de dados já existente, está sendo necessário definir de forma usual a estrutura para o funcionamento correto do módulo, não permitindo o uso de algumas praticidades. Uma alternativa que está sendo estudada é a manipulação do Active Record, para adaptar os padrões de acesso a banco de dados para a realidade do esquema apresentado no banco de dados da aplicação já existente na biblioteca. O Rails permite que o desenvolvedor modifique os padrões de acesso ao banco, definindo-os de acordo com o esquema utilizado em seu banco de dados (MARSHALL; PYTEL; JON, 2007). Como resultados futuros é possível comparar o acesso utilizando declarações SQL diretamente no código Ruby, com a modificação dos padrões do Active Record. 5 Discussão O Rails cumpriu seu papel como framework de desenvolvimento web muito bem referente ao desenvolvimento de um banco de dados vazio que evoluía juntamente com a aplicação. O Rails leva o programador a uma abordagem de desenvolvimento Ágil, seguindo os princípios apresentados anteriormente, fazendo com que o processo de desenvolvimento responda mais rapidamente a mudanças e gere resultados mais cedo no processo. Porém ao utilizar o framework sobre um banco de dados já existente, ou para migrar uma aplicação já 12 implantada para o framework, o trabalho gerado com configurações extras pode ofuscaR esse ganho de produtividade e os princípios do desenvolvimento Ágil e da convenção sobre configuração. Depende da familiaridade do desenvolvedor com o Active Record ou com o SQL do banco. Em algumas situações, utilizar SQL pode ser mais fácil que customizar o Active Record, podendo ocorrer também casos onde a vantagem de se trabalhar com o Active Record compensa o tempo gasto na configuração do mesmo. 6 Conclusão O Rails é um framework relativamente novo, porém mostrou destaque em torno dele. Para o desenvolvimento de um módulo web guiado pelos princípios Ágeis, sobre os quais o framework foi criado, ele é uma ótima ferramenta, demonstrando ser fator de peso para a produtividade em projetos web. O caso pode alterar quando se trata de acesso a banco de dados já existentes. Os padrões de desenvolvimento e mapeamento do Rails não foram projetados para este tipo de situação, apesar de o framework possibilitar esta alternativa, ela é mais custosa em termos de tempo com a configuração do acesso ao banco. Outros resultados ainda serão gerados, com a continuidade deste estudo, mas é perceptível que o Rails é uma ferramenta muito segura para desenvolvimento Ágil. Referências ASLESON, R.; SCHUTTA, N. T. Foundations of ajax. Berkeley, USA: Apress, 2006. CUNHA NETO, S. M. da. Rails versus struts: um comparativo de Frameworks. 2007. 56f. Monografia (Bacharelado em Ciência da Computação) – UNIRIO-Universidade Federal do Estado do Rio de Janeiro, Rio de Janeiro-RJ, 2007. FULTON, H. Ruby: whatisruby. 2005. Disponível em: <http://www.rubygarden.org/Ruby/page/show/WhatIs Ruby>. Acesso em: 14 jun. 2007. HIGHSMITH, J. History: the agile manifesto. 2001. Disponível em: <http://agilemanifesto.org/history.html>. Acesso em: 14 jun. 2007. MARSHALL, K.; PYTEL C.; JON, Y. Pro active record for ruby: databases with ruby on rails. Berkeley, USA: Apress, 2007. SPOSITO, R. Rub on Rails no browser. InfoExame, São Paulo, n. 248, p. 124-5, nov. 2006. THOMAS, D. et al. Agile web development with rails. nd 2 ed. Raleigh, USA: The Pragmatic Bookshelf, 2007. WALTON, B.; HIBBS, C. Rolling with ruby on rails revisited. 2006. Disponível em: <http://www.onlamp.com/ pub/a/onlamp/2006/12/14/revisiting-ruby-on-rails revisited.html>. Acesso em: 14 jun. 2007. CONTER, F. P.; PERES, F. F. F. / UNOPAR Cient., Ciênc. Exatas. Tecnol., Londrina, v. 6, p. 9-13, nov. 2007 Utilização do framework “Ruby On Rails” no desenvolvimento de um módulo web para sistema de biblioteca Felipe Pierre Conter* Discente da Universidade Estadual do Oeste do Paraná – Campus Foz do Iguaçu (UNIOESTE). e-mail: <[email protected]> Fabiana Frata Furlan Peres Mestranda em Ciência da Computação. Docente da Universidade Estadual do Oeste do Paraná – Campus Foz do Iguaçu (UNIOESTE). e-mail: <[email protected]> * Endereço para correspondência: Rua Edmundo de Barros, 557, apto 44 – CEP 85851-120 – Foz do Iguaçu, Paraná, Brasil. CONTER, F. P.; PERES, F. F. F. / UNOPAR Cient., Ciênc. Exatas. Tecnol., Londrina, v. 6, p. 9-13, nov. 2007 13