Qual Framework usar?

Olá estou a alguns dias procurando um framework ou ferramenta que possa me ser util da seguinte maneira:

Gostaria de um CRUD generator baseado em meu banco MySQL, tenha nele já as tabelas geradas e gostaria que a ferramenta fizese a engenharia reversa dele, gerando em MVC meus DAO’s TO’s e CRUD’s, me poupando de ter de fazer tudo isso manualmente, depois eu aplicaria o restante da logica como tela de login, e outros…

Pensei em usar o SpringROO para fazer isso, porém tive muitos problemas com essa feramenta no momento de gerar os codigos, acho que pelo fato de eu trabalhar por tras de um proxy, ainda assim eu configurei o proxy nele e não obtive sucesso…

Não tenho conhecimento de programação java para web, porém gostaria de aprender visto que me dara mais possibilidades que usando o javax swing, mas se tiverem uma boa ferramenta para gerar tudo para javax swing, otimo.

Server qualquer programa seja standalone, ou um plugin para o netbeans, se tiverem tutorial do mesmo junto agradeço
Abraços.

Para qm não tem conhecimento
e já qrer tudo isso? mto cômodo hein

Você poderia usar JBoss Seam, ele tem uma ferramenta que gera todo um sistema automaticamente através de sua base de dados. É claro que serão necessários ajustes, mas é realmente bem prático.

[quote=tmvolpato]Para qm não tem conhecimento
e já qrer tudo isso? mto cômodo hein

[/quote]
Não possuo conhecimento com java para web, mais em aplicações swing já faço o que gostaria de automatizar, não vejo porque continuar fazendo na unha se pode existir alguma ferramenta que me ajude.
Ou pra usar hibernate precisa aprender a montar milhões de querys em todos os tipos de banco?

Obrigado pela dica, vou dar uma olhada no JBoss Seam

Essa é a pior abordagem que se possa usar!

Banco de dados Relacionais e Programação Orientada a Objetos são coisas distintas. A modelagem de dados e a posterior codificação é algo de tempo do “Hollerith e sua máquina de perfurar cartões” :smiley: !

Essa abordagem foi desenvolvida para a sistemas procedurais. Uma tabela e um objeto são coisas diferentes, tanto que com JPA existe varias formas de mapear um objeto para uma tabela, principalmente quando isso envolve herança!

[quote=x@ndy]Essa é a pior abordagem que se possa usar!

Banco de dados Relacionais e Programação Orientada a Objetos são coisas distintas. A modelagem de dados e a posterior codificação é algo de tempo do “Hollerith e sua máquina de perfurar cartões” :smiley: !

Essa abordagem foi desenvolvida para a sistemas procedurais. Uma tabela e um objeto são coisas diferentes, tanto que com JPA existe varias formas de mapear um objeto para uma tabela, principalmente quando isso envolve herança![/quote]
Olá x@ndy, porque exatamente seria o pior tipo de abordagem?
Apesar de uma tabela e um objeto serem coisas diferentes sempre crio meus TO’s basendo nas tabelas do banco, fazendo deles uma representação do meu banco para ser usado dentro da aplicação, desta forma estaria errado?

Bom, no django (python) você define as classes de domínio e à partir disso ele gera a base e todos os cruds e telas de crud são gerados automaticamente.
Só que não é java :slight_smile:

Mas se quiser dar uma olhada:

https://www.djangoproject.com/

[quote=rogeriopaguilar]Bom, no django (python) você define as classes de domínio e à partir disso ele gera a base e todos os cruds e telas de crud são gerados automaticamente.
Só que não é java :slight_smile:

Mas se quiser dar uma olhada:

https://www.djangoproject.com/[/quote]
É eu estava pensando em algo como o Django só que para JAVA

Por que dados não são Objetos! Como você trabalha com herança, polimorfismo Value Object usando essa abordagem?
Esse tipo de abordagem leva você a usar os famigerados TO’s que nada mais é do que uma estrutura de dados, um objeto burro e nada muito diferente do struct do C e do record do pascal!

TO’s conduzem ao modelo anêmico com classes que nada mais são do que um repositório de dados e toda a lógica fica nos BO’s. Embora use objetos TO’s e BO’s é totalmente procedural. Esse tipo de arquitetura foi muito utilizada no EJB 2 devido a restrições da especificação e, embora as restrições tenham sumido no EJB 3, tem gente que usa até hoje.

Acredito que uso dessa abordagem persista porque é natural e quase não tem diferença para um modelo procedural! Contudo é uma péssima pratica pois cria um modelo de dificil manutenção com lógica duplicada e espalhada por todo o código.

Você mesmo está dizendo: os objetos representam a estrutura do banco de dados! É justamente isso que está errado pois os objetos devem representar o “negócio” que você esta modelando e não uma estrutura de dados relacional!

Segue o link para um artigo do Philip Calçado que fala sobre isso:

http://www.fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs.html

[quote=x@ndy]Essa é a pior abordagem que se possa usar!

Banco de dados Relacionais e Programação Orientada a Objetos são coisas distintas. A modelagem de dados e a posterior codificação é algo de tempo do “Hollerith e sua máquina de perfurar cartões” :smiley: !

Essa abordagem foi desenvolvida para a sistemas procedurais. Uma tabela e um objeto são coisas diferentes, tanto que com JPA existe varias formas de mapear um objeto para uma tabela, principalmente quando isso envolve herança![/quote]

Sim, o ideal é que as classes sejam modeladas primeiro gerando a base de dados pelo JPA e depois sim usar engenharia reversa, mas é claro que muitos ajustes precisarão ser feitos dependendo da necessidade.

[quote=rafadelnero][quote=x@ndy]Essa é a pior abordagem que se possa usar!

Banco de dados Relacionais e Programação Orientada a Objetos são coisas distintas. A modelagem de dados e a posterior codificação é algo de tempo do “Hollerith e sua máquina de perfurar cartões” :smiley: !

Essa abordagem foi desenvolvida para a sistemas procedurais. Uma tabela e um objeto são coisas diferentes, tanto que com JPA existe varias formas de mapear um objeto para uma tabela, principalmente quando isso envolve herança![/quote]

Sim, o ideal é que as classes sejam modeladas primeiro gerando a base de dados pelo JPA e depois sim usar engenharia reversa, mas é claro que muitos ajustes precisarão ser feitos dependendo da necessidade.[/quote]

Isso está correto, embora pessoalmente não goste pois os campos são gerados com tamanhos enormes (Varchar) e nem sempre com o melhor tipo de dado!

[quote=x@ndy]Segue o link para um artigo do Philip Calçado que fala sobre isso:

http://www.fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs.html[/quote]

x@andy,obrigado entendi o problema, porém ainda assim não enxerguei como seria uma boa solução…

Como então eu deveria seguir na criação de um projeto, acho que fiquei muito engessado com esse ideia de usar os TO’s… O conceito da união de logica e dados é algo que eu até entendi, mas não consigo “visualiza-la” , apenas consigo imagina-la como dados e logica de forma “separada”…

[quote=bacoco][quote=x@ndy]Segue o link para um artigo do Philip Calçado que fala sobre isso:

http://www.fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs.html[/quote]

x@andy,obrigado entendi o problema, porém ainda assim não enxerguei como seria uma boa solução…

Como então eu deveria seguir na criação de um projeto, acho que fiquei muito engessado com esse ideia de usar os TO’s… O conceito da união de logica e dados é algo que eu até entendi, mas não consigo “visualiza-la” , apenas consigo imagina-la como dados e logica de forma “separada”…[/quote]
Humm… pelo que eu vejo você está muito ligado no modelo procedural ainda!
Um exemplo simples seria uma nota fiscal. Considere que você tenha um Objeto NotaFiscal. Nela normalmente você teria os dados e uma outra classe para manipular esses dados com métodos como lancamento e cancelamento! O objeto NotaFiscal é totalmente burro, não faz nada e outro faz todas as operações mas não tem os dados. Porque não juntar os dois então?
Coloque os métodos lancamento cancelamento dentro do objeto NotaFiscal. Você tera um então um notaFiscal.lancar() e um notaFiscal.cancelar(). Pode haver metodos para busca também como NotaFisca.buscarPor(cliente);

Recomendo a leitura do livro Padrões de Projeto de Aplicações Corporativas do Martin Fowler e do livro da Livro Arquitetura e Design de Software do pessoal da Caelum!

[quote=x@ndy][quote=bacoco][quote=x@ndy]Segue o link para um artigo do Philip Calçado que fala sobre isso:

http://www.fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs.html[/quote]

x@andy,obrigado entendi o problema, porém ainda assim não enxerguei como seria uma boa solução…

Como então eu deveria seguir na criação de um projeto, acho que fiquei muito engessado com esse ideia de usar os TO’s… O conceito da união de logica e dados é algo que eu até entendi, mas não consigo “visualiza-la” , apenas consigo imagina-la como dados e logica de forma “separada”…[/quote]
Humm… pelo que eu vejo você está muito ligado no modelo procedural ainda!
Um exemplo simples seria uma nota fiscal. Considere que você tenha um Objeto NotaFiscal. Nela normalmente você teria os dados e uma outra classe para manipular esses dados com métodos como lancamento e cancelamento! O objeto NotaFiscal é totalmente burro, não faz nada e outro faz todas as operações mas não tem os dados. Porque não juntar os dois então?
Coloque os métodos lancamento cancelamento dentro do objeto NotaFiscal. Você tera um então um notaFiscal.lancar() e um notaFiscal.cancelar(). Pode haver metodos para busca também como NotaFisca.buscarPor(cliente);

Recomendo a leitura do livro Padrões de Projeto de Aplicações Corporativas do Martin Fowler e do livro da Livro Arquitetura e Design de Software do pessoal da Caelum![/quote]

Mais ai não estaria basicamente fazendo um TO+DAO ? Ou seja um objeto com todos os dados que um TO possui com os metodos do DAO além dos metodos convencionais? Ou estou viajando?

[quote=bacoco][quote=x@ndy][quote=bacoco][quote=x@ndy]Segue o link para um artigo do Philip Calçado que fala sobre isso:

http://www.fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs.html[/quote]

x@andy,obrigado entendi o problema, porém ainda assim não enxerguei como seria uma boa solução…

Como então eu deveria seguir na criação de um projeto, acho que fiquei muito engessado com esse ideia de usar os TO’s… O conceito da união de logica e dados é algo que eu até entendi, mas não consigo “visualiza-la” , apenas consigo imagina-la como dados e logica de forma “separada”…[/quote]
Humm… pelo que eu vejo você está muito ligado no modelo procedural ainda!
Um exemplo simples seria uma nota fiscal. Considere que você tenha um Objeto NotaFiscal. Nela normalmente você teria os dados e uma outra classe para manipular esses dados com métodos como lancamento e cancelamento! O objeto NotaFiscal é totalmente burro, não faz nada e outro faz todas as operações mas não tem os dados. Porque não juntar os dois então?
Coloque os métodos lancamento cancelamento dentro do objeto NotaFiscal. Você tera um então um notaFiscal.lancar() e um notaFiscal.cancelar(). Pode haver metodos para busca também como NotaFisca.buscarPor(cliente);

Recomendo a leitura do livro Padrões de Projeto de Aplicações Corporativas do Martin Fowler e do livro da Livro Arquitetura e Design de Software do pessoal da Caelum![/quote]

Mais ai não estaria basicamente fazendo um TO+DAO ? Ou seja um objeto com todos os dados que um TO possui com os metodos do DAO além dos metodos convencionais? Ou estou viajando?[/quote]
Não! DAO não tem nada haver com isso. Ele só serve para realizar a persistência dos objetos no banco! Nesse caso você estaria juntando O TO e o BO (Bussines Object).

Amigo, seus problemas acabaram?[size=9] [color=darkred]Típico vendedor de esquina[/color][/size]

Pesquise sobre o Framework Jaguar, ele é utilizado pelo BNDES (Banco Nacional de Desenvolvimento).

Um amigo fez um CRUD utilizando este “Kit de Desenvolvimento”, pois é um framework que vem com uma ferramenta (IDE Eclipse com plugins proprietários). Ele criou uma classe Java simples, abriu um Wizard e criou um CRUD com Repository, Bean, Controller e as telas (interfaces web) em apenas alguns minutos.

Em relação ao Swing, um framework que se assemelha bastante a forma de desenvolvimento é o Google Web Toolkit.

Espero ter lhe ajudado.

[quote=x@ndy][quote=bacoco][quote=x@ndy]Segue o link para um artigo do Philip Calçado que fala sobre isso:

http://www.fragmental.com.br/wiki/index.php/Evitando_VOs_e_BOs.html[/quote]

x@andy,obrigado entendi o problema, porém ainda assim não enxerguei como seria uma boa solução…

Como então eu deveria seguir na criação de um projeto, acho que fiquei muito engessado com esse ideia de usar os TO’s… O conceito da união de logica e dados é algo que eu até entendi, mas não consigo “visualiza-la” , apenas consigo imagina-la como dados e logica de forma “separada”…[/quote]
Humm… pelo que eu vejo você está muito ligado no modelo procedural ainda!
Um exemplo simples seria uma nota fiscal. Considere que você tenha um Objeto NotaFiscal. Nela normalmente você teria os dados e uma outra classe para manipular esses dados com métodos como lancamento e cancelamento! O objeto NotaFiscal é totalmente burro, não faz nada e outro faz todas as operações mas não tem os dados. Porque não juntar os dois então?
Coloque os métodos lancamento cancelamento dentro do objeto NotaFiscal. Você tera um então um notaFiscal.lancar() e um notaFiscal.cancelar(). Pode haver metodos para busca também como NotaFisca.buscarPor(cliente);

Recomendo a leitura do livro Padrões de Projeto de Aplicações Corporativas do Martin Fowler e do livro da Livro Arquitetura e Design de Software do pessoal da Caelum![/quote]

Você esta correto, mas também tudo é muito relativo.

Usar BOs (ou services, EJBs, WS, qualquer outra coisa), pode não ser totalmente incorreto, pois há situações de processos que não são especificamente regras de negócio.
Há casos também onde no seu exemplo, lançar uma nota fiscal pode ocorrer de diversas formas diferentes, sendo que por exemplo, um operador possa lançar a nota fisca, um processo batch possa lançar, um gerente possa lançar, das mais variadas formas possiveis. Pode-se sim em determinados casos tratar a tal nota fiscal como “objeto anêmico”, mesmo ela tendo regras de negócio embutidas nela, por estas regras serem particulares de outra entidade ou processo.

Não sei se ficou claro…

Sou contra o modelo anêmico, vulgo aquele que toda tela no sistema tem um Controller, um Service, um DAO e um TO representando o resultado da query no banco de dados, mas acho que tudo tem de ser olhado com cautela… certas abordagens não são incorretas, dependendo da situação.

[quote=vininewday]Amigo, seus problemas acabaram?[size=9] [color=darkred]Típico vendedor de esquina[/color][/size]

Pesquise sobre o Framework Jaguar, ele é utilizado pelo BNDES (Banco Nacional de Desenvolvimento).

Um amigo fez um CRUD utilizando este “Kit de Desenvolvimento”, pois é um framework que vem com uma ferramenta (IDE Eclipse com plugins proprietários). Ele criou uma classe Java simples, abriu um Wizard e criou um CRUD com Repository, Bean, Controller e as telas (interfaces web) em apenas alguns minutos.

Em relação ao Swing, um framework que se assemelha bastante a forma de desenvolvimento é o Google Web Toolkit.

Espero ter lhe ajudado.[/quote]
Só tem dois problemas: 1) É pago! 2) Saiu do CRUD, esqueça o framework!
Da uma lida aqui sobre isso!

[quote=jmmenezes]Você esta correto, mas também tudo é muito relativo.

Usar BOs (ou services, EJBs, WS, qualquer outra coisa), pode não ser totalmente incorreto, pois há situações de processos que não são especificamente regras de negócio.
Há casos também onde no seu exemplo, lançar uma nota fiscal pode ocorrer de diversas formas diferentes, sendo que por exemplo, um operador possa lançar a nota fisca, um processo batch possa lançar, um gerente possa lançar, das mais variadas formas possiveis. Pode-se sim em determinados casos tratar a tal nota fiscal como “objeto anêmico”, mesmo ela tendo regras de negócio embutidas nela, por estas regras serem particulares de outra entidade ou processo.

Não sei se ficou claro…

Sou contra o modelo anêmico, vulgo aquele que toda tela no sistema tem um Controller, um Service, um DAO e um TO representando o resultado da query no banco de dados, mas acho que tudo tem de ser olhado com cautela… certas abordagens não são incorretas, dependendo da situação.[/quote]
Sim, concordo com você! TO’s, por exemplo, é um padrão de projeto muito utilizado em sistemas distribuidos! Já vi também ser utilizado para troca de dados com a camada de visualização em sistemas Web com MVC (embora hoje em dia com o monte de frameworks que automatizam o processo, caiu em desuso)

O problema é que cada padrão deve ser aplicado corretamente. Já vi muita gente com “padrão de prata”, que aquele é aquele que o cara tenta usar para tudo (e é tudo mesmo). O que mais sobre com isso é o padrão Singleton que agora está sendo demonizado, embora tenha sua utilidade!

Já vi o mesmo acontecer com uso de Interfaces. O programador cria uma interface para cada classe que desenvolve, independentemente se esta interface terá apenas uma única implementação!