Nota do autor
Artigo

Por que mais um framework?


Mesmo utilizando frameworks disponíveis no mercado ainda precisamos de codificação desnecessárias. Isso porque os frameworks tem um determinado propósito que não chegam a ser um propósito tão profundo quanto o propósito do NEO.

Por exemplo, utilizamos o hibernate para fazer o mapeamento dos objetos ao banco de dados. Mas em cada aplicação temos que implementar um método findAll() em cada DAO. Ou então, criamos um campo do tipo Date em alguma classe e precisamos declarar uma validação para datas em algum XML. Esse tipo de trabalho que ainda tem que ser feito mesmo utilizando frameworks é que o NEO tenta resolver.

O NEO não propõe mais um framework, mas sim o próximo passo dos frameworks. Tanto que o NEO utiliza como base os frameworks Spring e Hibernate. O que o NEO propõe está além do que esses framework já propuseram.

A facilidade de desenvolvimento é um ponto chave do NEO. Eu também sou programador e criei um framework para facilitar o trabalho do programador (eu, no caso :D).

Uma das formas de facilitar o desenvolvimento é a não utilização de XML. Antes de existir o NEO, nós utilizávamos Struts para desenvolver na empresa. E eu ficava desanimado porque depois de criar uma Action com um bocado de código ainda tinha que declarar um form, uma action e forwards no struts.xml. Eu me perguntava, porque tenho que declarar isso tudo? Geralmente para fazer uma tela eu tinha que utilizar 3 XMLs. Um para o struts, um para a validação e um para o mapeamento no banco de dados. No NEO esses arquivos simplismente não existem. O NEO, ao ligar a aplicação, procura por classes especiais (como Actions do struts) e faz o registro automaticamente. Não é necessário indicar em nenhum lugar que as classes existem. O NEO simplismente acha.

Outro recurso, é que códigos comuns já vem implementados. Quantas vezes você tem que fazer uma tela de CRUD por dia? Ou um método findBy dentro de um DAO. O NEO fornece DAOs implementados, isto é, com funcionalidades que podem ser utilizadas sem nenhuma linha de código. Além disso ele possui Controllers especificos para as situações mais comuns como CRUDs e relatórios. Não é necessário nenhuma linha de código Java (a não ser a linha que declara a classe) para fazer um CRUD ou DAO. Se desejar modificar o comportamento padrão, você só precisará escrever o que for diferente.

A validação do NEO é feita através de annotations. O simples fato de anotar um getter com @Required faz com que qualquer tela que utilize essa propriedade ganhe a validação automática. Também é feita uma validação no servidor. Campos que forem do tipo Date por exemplo já ganham validação do tipo Date, não é preciso indicar ao framework que o campo date é um date.

Com nenhuma linha de código Java é possível fazer uma dependencia de combos utilizando Ajax.

Code:
<n:comboReloadGroup useAjax="true">
    <t:property name="pais"/>
    <t:property name="estado"/>
    <t:property name="cidade"/>
</n:comboReloadGroup>
 

Pronto! O código acima irá criar todo o javascript necessário para fazer o reload utilizando ajax. Há! Também não é necessário informar que no campo pais, estado ou cidade você deseja um combo. O Framework já sabe. Todas as propriedades que forem entidades já são combo por padrão. A lista a ser preenchida em cada combo vem do DAO que não foi necessário códificar.

Code:
 public class PaisDAO extends GenericDAO {
 }
 


O NEO utiliza sempre que possível Generics. Casts são praticamente inexistentes em aplicações com o NEO. Para utilizar o dao de Pais acima você teria o seguinte código:

Code:
 List lista = paisDAO.findAll(); // todos os finds são genéricos
 for(Pais pais: lista){
     System.out.println(pais.getNome));
 }
 


Construir queries também é fácil. O NEO provê uma classe, a QueryBuilder, que serve exclusivamente para contruir queries. Veja:


Sem queryBuilder

Code:
 String query = "from Aluno ";
 if(filtro.getNome() != null){
      query+= "where nome = ?";
 }
 Query query = session.createQuery(query);
 if(filtro.getNome() != null){
      query.setString(1, filtro.getNome());
 }
 return query.list();
 
(Tem algum tempo que não utilizo hibernate diretamente, mas existe alguma forma de fazer isso mais simples? Até onde eu saiba, utilizando Criteria não é possível atingir o mesmo efeito porque não é eliminada a condição where nome = ? se nome for null)


Com o QueryBuilder
Code:
 return query() // o método query() é disponível em todos DAOs
               .from(Aluno.class)
               .where("aluno.nome = ?", filtro.getNome())
               .list();
 


Um dos princípios da orientação a objetos é o High Cohesion (Alta coesão). Isso significa que códigos relacionados devem ficar próximos. Uma Action do Struts por exemplo não promove isso, uma vez que cada operação fica dentro de uma classe diferente. O NEO possui um controller, o MultiActionController (não é o mesmo do Spring), que permite o High Cohesion. Para adicionar uma nova operação ao controller basta criar um novo método. Códigos relacionados agora, podem ficar dentro da mesma classe, cada operação com o seu método.

Nos JSPs não é necessário falar que determinado input deve possuir máscara para data. Se a propriedade a que se refere o input é do tipo data a máscara será colocada. Se for Double, será colocada uma máscara para Double, se for CPF será colocada uma máscara para CPF. O NEO possui outros tipos de dados como CPF, CNPJ, CEP e Money.

A classe Money possui inclusive métodos para calcular com dinheiro que evitam a perda dos centavos em operações matemáticas.

Essas são algumas idéias que o NEO possui e que diferenciam ele dos outros frameworks. O intuito do NEO é resolver o problema. O NEO efetua configurações, ajustes, realiza operações, escolhe propriedades tudo de acordo com o que foi programado. Ou seja, você programa o mínimo necessário e o NEO faz o resto. Na nossa empresa a pior estimativa de melhora no desenvolvimento depois do NEO foi de 30%.

O NEO existe há dois anos mas só agora está sendo liberado o código fonte. O desenvolvimento do framework foi direcionado pelas necessidades da Linkcom (empresa onde trabalho). Por isso alguns ajustes ou novas funcionalidades ainda são necessários. Mas o framework já possui um conjunto bom de funcionalidades para se desenvolver aplicações. Inclusive, o sistema da Universidade FUMEC é desenvolvido utilizando o NEO.

Dúvidas serão respondidas no fórum do framework. Sugestões são muito bem vindas. Bugs serão corrigidos o mais rápido possível. Espero que o framework seja de grande utilidade para vocês no desenvolvimento de aplicações.


Muito Obrigado pela atenção...


Até mais...

Fonte: Post em um forum do GUJ Publicado em 22/06/2007 por Rógel Garcia.
Tutoriais
Últimas postagens
NEO + TOMCAT (Multiplos DataSources) Autor: ninjasauro Alteração do template Autor: marcos_aurelio detalhe com checklist Autor: biharck Performance ao carregar combos Autor: andre validação de Telefones Autor: rdpinto Erro no hibernate e postgresql Autor: frederico10 ApplicationConfig.xml Autor: ninjasauro Aceitação Neo Autor: Nunes Publicar aplicação Autor: ninjasauro Problemas com "TAB" no Firefox. Autor: Marcos Submeter Grid Editável Autor: karine Erro de tag property não está aninhada Autor: r@mon ContextLoaderListener Autor: Marcos Alguém já fez integração do Neo com o AdobeFlex?? Autor: r@mon Bean transiente - Jsp/Controller Autor: leilanefr Relacionamento Recursivo! Autor: valtermaia Como carregar um comboBox (select) com dados vindos do banco de dados ? Autor: vnbarbieri Links quebrados no artigo de integração Flex-Neo Autor: v@gner Selecionar mais de um atributo no selectOnePath Autor: tuliocota Meu primeiro CRUD Autor: r@mon Duvida para carregar os atributos das combos Autor: andre Problemas com filtragem na versão 3.4 Autor: andre como aumentar o time out da session no neo Autor: donatinho Parse de tags no template jsp Autor: sandrosalles Filtro GZip Autor: Igor.Costa Injeção de dependencia Autor: andre Configuração. Autor: conde.dracula Buttons Autor: colombo Neo versão 3.4.0 Autor: pedro.goncalves Atualização das Bibliotecas usadas pelo NEO Autor: guilherme.pimentel Dúvidas Criptografia Autor: colombo CRUD Master-Detalhe Autor: valdecijunior Iniciante Autor: soulhave Dúvidas CRUD Autor: tarcha Neo + NetBeans!!! Autor: Alandrei AOP Autor: cidacio Flex+NeoFramework+GraniteDS Autor: vnbarbieri Ótimo trabalho! Parabéns :) Autor: ismaels Problema com herança Autor: andre Alguem poderia me ajudar ? Flex+Blazeds+NeoFramework Autor: dsfextreme ScreenCast Crud - fui rodar e olha o que aconteceu !!! Autor: dsfextreme Ordenação sem ser em crud... Autor: rodrigo.freitas Exemplo Hello World Autor: vinicius.janones Integração Flex+NeoFramework com GraniteDS Autor: paulo245 Dúvidas relacionado a Validações, Mensagens e Controllers Autor: Nunes NEO + Hibernate Search. Autor: Nunes campos negativos Autor: donatinho Login Autor: robmsjr orderby Autor: guilhermeaol Conexão com dois Bancos Autor: karine