Lançamento NEO framework  XML
Índice dos Fóruns » Notícias
Autor Mensagem
pgoncalves
Thread.start()
[Avatar]

Membro desde: 17/04/2006 16:58:18
Mensagens: 35
Offline

Liberado o código fonte do framework NEO. O NEO é um framework MVC desenvolvido pela equipe de desenvolvimento da Linkcom e coordenado por Rógel Garcia. Ele é baseado no Spring e Hibernate e visa o desenvolvimento rápido de aplicações web. É um framework inovador, possui vários recursos como Ajax facilitado, não necessita XML, utilização de Annotations e Generics. É possível construir um CRUD em apenas 10 minutos.

Url do projeto: http://www.neoframework.org/

Screencast de demonstração de desenvolvimento de um crud simples:
http://www.neoframework.org/siteneo/tutorial/ver/21/CRUD

Pedro Gonçalves
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

Meu deus... mais um web framework...

Qual a vantagem desse novo framework ? me pareceu a mesma coisa que todos os outros..

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
rflprp
GUJ Ranger

Membro desde: 27/04/2005 18:52:49
Mensagens: 822
Offline

Qual a diferença deste tópico, para este http://www.guj.com.br/posts/list/62121.java ?
pgoncalves
Thread.start()
[Avatar]

Membro desde: 17/04/2006 16:58:18
Mensagens: 35
Offline

De acordo com as palavras do criador:


Olá pessoal, eu sou Rógel Garcia, criador do framework NEO.

O site já está atualizado com a licença, e os fontes em breve já terão referencia à LGPL.

A documentação já está com o conteúdo principal para começar a trabalhar com o framework. Novas atualizações serão feitas ao longo do tempo para torná-la mais abrangente.

Porque 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 quando 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 ).

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<Pais> {
}




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<Pais> 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.


Vide post: http://www.guj.com.br/posts/list/62121.java

Pedro Gonçalves
Paulo Silveira
Administrador
[Avatar]

Membro desde: 07/08/2002 18:38:50
Mensagens: 4204
Localização: São Paulo
Offline

Apesar de eu concordar com criticas em relacao a testes unitarios, parabens pela iniciativa, e mais ainda pela qualidade de documentacao do projeto!!

http://blog.caelum.com.br twitter: @paulo_caelum


[Email] [WWW]
pgoncalves
Thread.start()
[Avatar]

Membro desde: 17/04/2006 16:58:18
Mensagens: 35
Offline

Rafaelprp wrote:Qual a diferença deste tópico, para este http://www.guj.com.br/posts/list/62121.java ?


A diferença foi que o moderador havia retirado o post de notícias, e passou para assuntos off-topic.. por isso tem 2 posts.

Paulo Silveira wrote:
Apesar de eu concordar com criticas em relacao a testes unitarios, parabens pela iniciativa, e mais ainda pela qualidade de documentacao do projeto!!


Eu também concordo com relação aos testes unitários, não tiro em momento algum a razão. Mas começou assim, só que ao longo do tempo vamos melhorar nesse ponto. já começamos a trabalhar nos testes unitários.


Pedro Gonçalves
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

vixe... nao vi que jah tinha topico...

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
bielmenezes
Thread.start()
[Avatar]

Membro desde: 18/06/2007 13:07:38
Mensagens: 29
Localização: Florianópolis - SC
Offline

Dei uma olhada no video de exemplo de como implementar um crud, achei interessante as facilidades do framework.
Mais um framework para facilitar nossas vidas..

"To DO is to BE" - Nietzsche
"To BE is to DO" - Kant
"DO BE DO BE DO" - Sinatra

Bacharel em Sistemas de Informação - UFSC
SCJP 5.0
[Email] [WWW] [MSN]
bbviana
JavaChild
[Avatar]

Membro desde: 24/07/2006 13:11:57
Mensagens: 111
Localização: São Paulo
Offline

Bom, eu li a (excelente) documentação do framework, achei a arquitetura bem legal, mas nao vi nada de novo e nem achei mais facil do que o struts 2, por ex.
Todo esse negocio de GenericDAO e GenericService nao é uma caracteristica particular do framework e o Controller nao deixa de ser uma action do struts.
Bom, eu sempre sou contra a reinvençao da roda, mesmo q seja bem feita.
pgoncalves
Thread.start()
[Avatar]

Membro desde: 17/04/2006 16:58:18
Mensagens: 35
Offline

bbviana wrote:
Bom, eu li a (excelente) documentação do framework, achei a arquitetura bem legal, mas nao vi nada de novo e nem achei mais facil do que o struts 2, por ex.
Todo esse negocio de GenericDAO e GenericService nao é uma caracteristica particular do framework e o Controller nao deixa de ser uma action do struts.
Bom, eu sempre sou contra a reinvençao da roda, mesmo q seja bem feita.


bbviana, o objetivo do neo, não é reinventar a roda, desenvolvendo um novo framework.. para isso existem tantos né? O objetivo real é interligar tecnologias já existente, e fazer uma camada sobre elas para facilicar o uso de todas.. E também fazer com que você tenha que repetir o mínimo de código o possível, tornando assim uma tarefa repetitiva se comportar de maneira padrão sem a necessidade de escrever mais códigos.

Pedro Gonçalves
jack_-_ganzha
JavaEvangelist
[Avatar]

Membro desde: 31/03/2003 13:18:12
Mensagens: 315
Localização: Recife - Pernambuco
Offline

Um frameworks construido sobre Spring e Hibernate? Que tal o Grails?

ps.: HTTP -> Servlets -> Spring -> NEO. BD -> JDBC -> Hibernate -> NEO. Sou só eu que acho que daqui a pouco vão construir um framework sobre o framework construido sobre outros frameworks?

valeuz...

Marcos Silva Pereira

http://www.javafree.org
http://marcospereira.wordpress.com
[MSN] [ICQ]
duvidante
JavaTeenager
[Avatar]

Membro desde: 12/03/2007 16:20:22
Mensagens: 168
Offline

bielmenezes wrote:Mais um framework para facilitar nossas vidas..


Vc tem certeza absoluta do q vc disse?
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

Olá pessoal, agradeço os elogios e também as críticas. Afinal, sem elas nós não podemos progredir.

Realmente, GenericDAO, GenericService não são inovações, Hoje!

O NEO, na verdade, existe hà dois anos. Quando foi criado ainda nem se falava em utilização de generics para DAO. As primeiras versões do NEO inclusive utilizavam versões beta do java 1.5.
O MultiActionController, tem uma diferença básica entre a Action do Struts que é a possibilidade de se ter várias actions dentro do mesmo controller. Isso ajuda a organizar a aplicação. Nas aplicações antigas da empresa eram necessárias pelo menos 5 classes para se fazer um CRUD, hoje é uma classe com 5 métodos.
Mas essas características nem são o ponto mais forte do NEO. São apenas uma questão de organização. bbviana tem razão.

O que realmente o NEO faz por você é o seguinte: Ao invés de você configurar o framework, o framework se configura de acordo com a aplicação. Um dos efeitos disso, é a não utilização de XMLs. Lembrando que no NEO o XML não foi trocado por outra forma de configuração, ele simplismente foi eliminado.
Muita gente fala que é bobagem, mas eu acho que só isso já vale o framework. Experimente trabalhar um pouco, com um framework que não necessite de XML, e depois tente voltar para um que precise.
Veja o exemplo da configuração do banco de dados. É mais fácil configurar o Hibernate pelo NEO, do que utilizando o Hibernate sozinho. Basta um connection.properties. O dialeto, o NEO até escolhe para você de acordo com o banco. Esse tipo de facilidade é o que o NEO tenta promover. Ainda existe muita burocracia ao se desenvolver aplicações que podem ser eliminadas. O NEO também possui um engine de templates que cria um MVC individual para cada tag. Na empresa, temos várias aplicações com 'caras' totalmente diferentes. Mas se verificar os JSPs, são bem simples e identicos. Isso porque são trocados apenas os templates.
Outro fator bastante interessante é o tratamento de Ajax, especialmente em combos. Não é necessário código Java nem Javascript.
Outra vantagem, a validação. Se criar um campo Date, e criar um t:property para esse campo, já terá máscara para datas e validação javascript. Você nem precisa informar isso.
Com o tempo de uso do framework, você perceberá que existem várias coisinhas chatas que o NEO já resolve.

É claro, que como um frameowrk open-source, o NEO ainda é muito novo. Várias funcionalidades ainda serão necessárias. Por isso, continuem dando suas opniões sugestões e críticas, elas são muito importantes...

Eu postei no portal java, uma enquete. Se quiserem podem votar sobre o que acharam do framework.

http://www.portaljava.com/home/modules.php?name=Forums&file=viewtopic&t=40220

Valew galera....

Vou fazer uma pergunta. Como você faz um combo na sua empresa?

Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
rogelgarcia
GUJ Master
[Avatar]

Membro desde: 21/06/2007 23:27:21
Mensagens: 1850
Offline

Há...
A diferença entre este tópico e esse http://www.guj.com.br/posts/list/62121.java

É que aqui estamos falando sobre o NEO, no outro tópico estamos falando sobre seguros de automóvel.... hehehheh


Rógel Garcia, criador do framework NEXT

http://www.nextframework.org
chun
GUJ Master
[Avatar]
Membro desde: 08/11/2004 15:43:41
Mensagens: 1699
Localização: Curitiba/PR
Offline

Esse negocio de "configuracao autoMAGICA", hummmm.... Algo aqui nao esta cheirando bem...

Ps: Este post é uma opinião pessoal e NÃO DEVE SER ENCARADO COMO VERDADE ABSOLUTA... então... caso você não concorde... não precisa cortar os pulsos...

------
Controverso Eu ? http://www.go-java.com/blog
[WWW] [ICQ]
 
Índice dos Fóruns » Notícias
Ir para:   
Powered by JForum 2.1.8 © JForum Team