• Nenhum resultado encontrado

No desenvolvimento de Struts2 foi utilizado o ORM Hibernate como camada de gestão da persistência. Em Struts2, tendo em conta que já havia sido desenvolvida a aplicação em Rails, utilizou-se o modelo de Base de Dados existente para construir o Model da aplicação. Através de Hibernate foi possível criar as classes Entidade do Model a partir das tabelas de Base de Dados já existentes.

Rails

As versões das tecnologias utilizadas na implementação da aplicação:

• Framework - Ruby on Rails 4.1.4

• Linguagem - Ruby 2.0.0p647

• Servidor - WebBrick 1.3.1

Apesar Rails não necessitar de um IDE para agilizar as tarefas que são necessárias fazer como foi referido no capítulo4, o IDE RubyMine implementa os scripts de que Rails dispõe,

chamados generators, projetados para tornar as tarefas de desenvolvimento bastante mais fáceis, criando tudo o que é necessário para iniciar determinada tarefa. Assim todas as tarefas feitas pelos generators de Rails são apresentados através de um menu de botões bastante mais amigável do que a linha de comandos.

De seguida serão apresentados e explicados alguns dos generators que RubyMine imple- menta. Através do generator apresentado no excerto de código 7.1 é possível criar uma

aplicação Rails sendo instaladas e configuradas todas as dependências do novo projeto, as- sim como também é criada uma estrutura de diretórios bem organizada, onde é facilmente percetível mesmo ao programador mais inexperiente os lugares onde se situa o quê.

$ rails new Setare

Código 7.1: Criação de Setare através do generator rails new

Após a execução do comando acima apresentado é gerada a estrutura de ficheiros que se pode ver na figura15.

No caso de Rails a estrutura de diretórios criados dispensa por completo descrições deta- lhadas, dado ser incrivelmente explicito, sendo possível compreender rapidamente a estru-

50 Capítulo 7. resultados

Figura 15: Estrutura do ficheiros Rails

É agora possível criar os componentes de desenvolvimento específicos tais como os Con- trollers e as Views (componentes mínimos considerando que ainda não existe lógica de ne- gócio (Model)). No exemplo do excerto7.2é demonstrado através de um Rails generator a

forma simples como podem ser criados o Controller Home e a View Index.

$ rails generate controller home index

Código 7.2: Criação de um Controller e View utilizando generator Rails

Desta forma o uso do generate controller criará um Controller chamado HomeController que implementará uma action index, e criará também um diretório chamado Home que contém a página index.html.erb, dentro da pasta View já existente.

A comunicação com a Base de Dados em Rails é também umas das particularidades muito importantes durante a fase de configuração inicial. Tal como é apresentado na figura

15 da estrutura de ficheiros da aplicação, Rails criou um arquivo de configuração da Base

7.1. Configuração Inicial 51

Por definição a Base de Dados de ligação é SQLite3, porém pode ser facilmente feita a alteração dessa configuração para outros tipos de Bases de Dados, como por exemplo mysql como pode ser visto no excerto7.3.

development : adapter : mysql2 encoding : utf8 database : Setare_development pool : 5 username : root password : admin test : adapter : mysql2 encoding : utf8 database : Setare_test pool : 5 username : root password : admin production : adapter : mysql2 encoding : utf8 database : Setare_production pool : 25 username : root password : admin reconnect : true

Código 7.3: Configuração da Base de Dados em Rails

No ficheiro de configuração database.yml, são configuradas três ligações diferentes: deve- lopment, test e production, associados respetivamente às bases de dados Setare_development, Setare_test e Setare_production.

A conceção e desenvolvimento do Model está diretamente ligada à metodologia de desen- volvimento que se utiliza. Rails encoraja um estilo de desenvolvimento ágil e iterativo, e portanto prevê que a Base de Dados que suportará a persistência da aplicação deverá ser idealizada, mas não criada em primeiro lugar. Invés disso, deve ser suportada por iterações que acompanham o progresso de desenvolvimento da aplicação.

Em Rails o Model é suportado através do componente ActiveRecord (descrito no sub- capítulo 3.4.3). Através do uso do generator que é apresentado no excerto 7.4 é possível

criar a classe User do Model com o atributo name do tipo string.

52 Capítulo 7. resultados

Através do generator7.4 são criados um conjunto de ficheiros de apoio entre os quais se

destacam, a classe User e um ficheiro chamado Migration.

Migrations é uma funcionalidade do ActiveRecord que permite informar a Base de Dados através de linguagem Ruby, quais as tabelas que têm de ser criadas ou alteradas. Desta forma, Migrations, funcionam como um mecanismo de controlo de versões da Base de Dados, pois será a aplicação Rails que ditará a estrutura que a Base de Dados terá de ter.

7.2 d o c u m e n ta ç ã o e c o m u n i d a d e

Para que haja um melhoramento continuo dos Frameworks, em especial quando não são suportados por grandes corporações empresariais, são importantes dois fatores:

• Dispor de um boa e organizada documentação, para que os novos utilizadores possam atingir um nível expert no menor tempo possível;

• Garantir a proliferação de uma comunidade crescente e com espírito de entreajuda.

Struts2

A própria documentação oficial em Struts2 não se apresenta organizada da melhor forma. Existem alguns guias, tutoriais e livros de iniciação no site oficial e em websites de terceiros. Após gastar mais tempo do que se poderia esperar, encontra-se realmente bastante informa- ção e até mesmo os mais variados guias detalhados sobre como integrar Struts2 com outras tecnologias como Spring e Hibernate, embora a quantidade de links desativados tais como “wiki pages” do site oficial podem fazer o utilizador sentir-se um pouco desconfortável. Em termos de comunidade, é grande o suficiente tendo em conta a idade e a popularidade, e desta forma, dificilmente alguém ficará sozinho sem solução à vista para um determinado problema. No entanto, em Struts2, apesar da informação existir em grande quantidade [4], o programador pode ficar com a sensação de confusão quando tenta procurar um meca- nismo específico. Isto pode dever-se ao facto de existir uma numerosa base de ferramentas conjugáveis com Struts2, tornando-se mais difícil encontrar informação relativa a um dado conjunto.

Rails

Como acontece na maioria dos Frameworks open-source, a assistência técnica oficial é quase inexistente, e por isso, aspetos como a documentação e o suporte da comunidade são fontes cruciais para quem desenvolve software. Rails desde à muito que vem construindo uma vasta fundação de documentação, desde APIs [18] [19], guias/tutoriais e até mesmo livros.

7.3. Complexidade 53

Juntamente com um grande número de guias de iniciação e de livros, Rails possui tam- bém uma enorme comunidade, que inclui seções de “Step-by-step”, wikis, mailing-list e até mesmo canais IRC para discutir e esclarecer questões. Desta forma Rails fornece ao pro- gramador um ótimo ponto de partida para iniciar o desenvolvimento. De uma forma geral Rails deixa o programador mais confortável no que diz respeito à estrutura organizacional da documentação.

7.3 c o m p l e x i d a d e

Struts2

Em Struts2, a aprendizagem focou-se unicamente na lógica de desenvolvimento do Fra- mework dado existir já um conhecimento prévio da linguagem Java. A lógica utilizada por Struts2 não foi considerada complexa, embora por vezes subsistissem algumas dúvidas sobre como fazer determinada tarefa tendo em conta que existiam várias formas. De uma maneira geral pode dizer-se que Struts2 não é leve, mas também não pode ser considerado um Framework complexo. Um exemplo é a introdução de alguns plugins como é o caso de convention-plugin que apadrinha o conceito Convention over Configuration (abordado com maior detalhe no critério de Design Patterns, inerente à 2a fase dos critérios de Avaliação) que permite escrever as suas Action classes e interliga-las com as suas páginas de resultados, sem que seja necessário uma única linha de configuração em código xml como acontecia anteriormente. Struts2 é um Pure-MVC com uma arquitetura relativamente simples, sem muitos componentes extras que possam aumentar a complexidade.

Rails

Rails foi desenhado para ser um Framework de desenvolvimento rápido, sendo que rápido implica ser fácil de usar e de pouca complexidade. Reforça o seu principal conceito de desenvolvimento “Convention over Configuration” e fá-lo da melhor maneira. Apesar de já incluir todas as ferramentas necessárias para desenvolver uma aplicação de início ao fim, pode ser aumentada a sua complexidade através da adição de plugins conhecidos como gems, para que sejam adicionadas novas funcionalidades. Por outro lado, um dos pontos de desvantagem será regra geral o facto de o programador não estar familiarizado com a linguagem Ruby, o que no caso de Struts2 não será tão usual pela grande expansão da linguagem Java. Ao contrário do que acontece com Struts2 em que já existia conhecimento da linguagem Java e portanto, todo o esforço foi direcionado para a aprendizagem do Fra- mework em si, em Rails o mesmo não aconteceu. Numa primeira fase foi investido bastante

54 Capítulo 7. resultados

possível dedicar esforço na aprendizagem do Framework. Apesar de tudo, pode dizer-se que a curva de aprendizagem foi bastante elevado tendo em conta a disponibilidade de cur- sos e tutoriais encontrados online para iniciação da prática de desenvolvimento. Em Rails apesar do completo conjunto de ferramentas, este não é em nada complexo, não sendo necessário configurar praticamente nada (COC), e ao mesmo tempo regendo-se pelo princí- pio da não repetição de código (DRY), que diz que linhas de código iguais só devem estar definidas num único lugar.

7.4 d e s i g n pat t e r n s

Os design patterns representam formas de resolução para determinados problemas. No âmbito do desenvolvimento web, estes fornecem igualmente formas de implementação, que definem regras gerais da estruturação dos respetivos componentes assim como a forma como devem ser implementados. Neste subcapítulo serão abordados os design patterns considerados como mais importantes na conceção das aplicações desenvolvidas.

7.4.1 Model View Controller - MVC

Struts2

De uma maneira geral, Struts2 é um Framework pull-MVC (também conhecido como component- based). O design pattern MVC em Struts2 é concebido através de 4 componentes principais (descritos no subcapítulo3.3.4):

• Actions • Interceptors

• ActionContext/ ValueStack • Results

Tal como abordado no subcapítulo 3.2, a arquitetura pull-MVC é ligeiramente diferente

do tradicional, uma vez que a Action toma o papel do Model invês de Controller.

O Controller é implementado através do filtro StrutsPrepareAndExecuteFilter, o Model é im- plementado através das Actions classes e Interceptors, e a View pelos Results. Num quarto nível de abstração existe ainda ActionContext que funciona como uma plataforma de ar- mazenamento de dados que permite interligar os outros componentes. Para além dos componentes acima mencionados, existem ainda outros componentes que dizem respeito a configurações aplicacionais que dizem respeito às Actions e Results. O diagrama apresen- tado na figura16 descreve o fluxo de um pedido desde que chega ao servidor até que seja

Documentos relacionados