Arquitetura com Swing  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
Igor Novaes
JavaBaby
[Avatar]

Membro desde: 21/03/2007 21:07:43
Mensagens: 95
Offline

Caros amigos.

Estou pretendendo fazer uma revisão sobre o pacote Swing para encarar um sistema de pequeno a médio porte com esta aplicabilidade.

Gostaria de abrir uma discussão com este tópico, e é até uma dúvida minha sobre o assunto de qual arquitetura mais utilizada/recomendável para trabalhar com Swing e banco de dados.

Eu até o momento estou arquitetando o desenvolvimento como faço no J2EE com (MVC - JavaBean - JSP) e a segunte hierarquia de classes para trabalhar em DeskTop:

Conexão.java - extendendo da Classe JFrame;
Classes DTO - extendendo de Conexao;
Classes DAO - extendendo das Classes DTO;
Formulários Frame - extendendo de Classes DAO implementando ActionListener;
Classes de Start extendendo dos Formulários.

Existe uma cultura mais padronizada/utilizada pela comunidade java ou realmente eu posso ter um sistema bem arquitetado desta forma?
Gostaria muito que isso fosse comentado por vocês até mesmo pra eu ter a certeza do que posso aplicar pra obter uma performace sadia.
E claro para todos aqueles que tenham esta grande e importante dúvida sobre o assunto.

Muito obrigado.
Abraço a todos.
[MSN]
Bruno_Leonardo
JavaEvangelist

Membro desde: 25/01/2008 17:13:57
Mensagens: 406
Offline

Cara,

Por incrível que pareça iria postar um tópico com o mesmo questionamento do seu, afinal essa dúvida persiste em minha cabeça já algum tempo. Espero que os colegas experientes possam dar seus apoios e compartilharem seus conhecimentos.


RafaelRio
Java Ninja
[Avatar]

Membro desde: 05/09/2006 06:52:42
Mensagens: 255
Localização: São Paulo
Offline

Igor Novaes wrote:Caros amigos.

Estou pretendendo fazer uma revisão sobre o pacote Swing para encarar um sistema de pequeno a médio porte com esta aplicabilidade.

Gostaria de abrir uma discussão com este tópico, e é até uma dúvida minha sobre o assunto de qual arquitetura mais utilizada/recomendável para trabalhar com Swing e banco de dados.

Eu até o momento estou arquitetando o desenvolvimento como faço no J2EE com (MVC - JavaBean - JSP) e a segunte hierarquia de classes para trabalhar em DeskTop:

Conexão.java - extendendo da Classe JFrame;
Classes DTO - extendendo de Conexao;
Classes DAO - extendendo das Classes DTO;
Formulários Frame - extendendo de Classes DAO implementando ActionListener;
Classes de Start extendendo dos Formulários.

Existe uma cultura mais padronizada/utilizada pela comunidade java ou realmente eu posso ter um sistema bem arquitetado desta forma?
Gostaria muito que isso fosse comentado por vocês até mesmo pra eu ter a certeza do que posso aplicar pra obter uma performace sadia.
E claro para todos aqueles que tenham esta grande e importante dúvida sobre o assunto.

Muito obrigado.
Abraço a todos.


Não vou conseguir dar nenhuma resposta mais elaborada agora - mesmo porque eu ainda penso bastante em como fazer um design legal com Swing - mas veja o Presentation Model do titio Fowler e os artigos no sítio do JGoodies.

Essa thread e essa também podem te ajudar a pensar em algo, principalmente se seguir os links e testar alguma coisa.

Procure pelo Swing Application Framework (JSR-296) e o Genesis. Eu me dou melhor com o primeiro, mas vi um projeto em que usaram o Genesis e conseguiram uma ótima arquitetura. Esse software tinha testes unitários, domain model, AOP, tudo encaixadinho bonitinho, muito fera.

EDITADO: Com Swing, não tente separar a view do controller.
Sim, isso mesmo, vou repetir pra não acharem que escrevi errado e, pra quem achar que eu pirei, ter certeza de vez: não tente separar a view do controller!

Ficou mais confuso e na sua cabeça predominam ??????????????????????????????????? ? <- (Essa última interrogação só indica que a frase é uma pergunta, não está na sua cabeça.)

Veja o Presentation Model e o artigo A Swing Architecture Overview.


Mão na massa!

This message was edited 1 time. Last update was at 07/06/2008 02:00:33


Rafael Fiume.
Yes, Nós Temos Bananas

Sun Certified Programmer for the Java Platform, Standard Edition 6
Sun Certified Web Component Developer for the Java Platform, Enterprise Edition 5

Nullius in verba.
"A palavra de nenhum homem será a final."
Lema da Royal Society, associação de cientistas de Londres, em 1660. Entre os seus membros e presidentes esteve Isaac Newton.
[Email]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

Os paradigmas desktop e web são bem diferentes. Por consequencia, a sua arquitetura também vai ser.
Acho que vc vai sobrecarregar sua arquitetura fazendo dessa forma. Sua aplicação não precisa ter as limitações do HTTP (sem conexão ou estado), seu cliente é consideravelmente mais poderoso e pode processar muita coisa para o servidor, etc...

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Igor Novaes wrote:Conexão.java - extendendo da Classe JFrame;
Classes DTO - extendendo de Conexao;
Classes DAO - extendendo das Classes DTO;
Formulários Frame - extendendo de Classes DAO implementando ActionListener;
Classes de Start extendendo dos Formulários.


Já que a pergunta é sobre arquitetura:

Conexão é uma JFrame?
Objetos que só guardam dados são conexões?
Objetos que só fazem a interface com a persistência são objetos que guardam dados?
Formulários acessam o banco diretamente?
Essas "Start" faz tudo isso que disse acima?

Não quero sabe se é "Sim" para a sua arquitetura, quero saber se essa sua laranja é uma maçã.

O problema que vejo é que você está usando Herança para agregar funcionalidade, quando Herança foi feita para especializar tipos e comportamentos sobre dados.

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
Igor Novaes
JavaBaby
[Avatar]

Membro desde: 21/03/2007 21:07:43
Mensagens: 95
Offline

Esta arquitetura que desenhei é utilizada de forma a poder ter um reaproveitamento máximo do código e sem perder o padrão java bean.
Isto inclusive foi discutido com alguns professores do curso onde tomei curso de Java, e nenhum deles havia condenado este padrão. Mesmo porque faço uso da herança de classe - o grande ponto da O.O..

Sei que realmente é um assunto muito peculiar e específico para cada projeto, mas a minha laranja mesmo sendo maçã não deixa de produzir suco de laranja. Até fujo um pouco da normalidade dos formatos passados nos cursos e apostilas de Java que presenciei.

Mas, como o java é um planeta, sei que existe muita coisa pra ser descoberta. E programar em java é pesquisar sempre.
[MSN]
RafaelRio
Java Ninja
[Avatar]

Membro desde: 05/09/2006 06:52:42
Mensagens: 255
Localização: São Paulo
Offline

Igor Novaes wrote:Até fujo um pouco da normalidade dos formatos passados nos cursos e apostilas de Java que presenciei.


Se conseguir uma boa arquitetura, vai fugir totalmente do que encontra em apostilas. Só pra acrescentar ao que os camaradas já disseram:

ViniGodoy wrote:Os paradigmas desktop e web são bem diferentes. Por consequencia, a sua arquitetura também vai ser.
Acho que vc vai sobrecarregar sua arquitetura fazendo dessa forma. Sua aplicação não precisa ter as limitações do HTTP (sem conexão ou estado), seu cliente é consideravelmente mais poderoso e pode processar muita coisa para o servidor, etc...

Se mastigar o que o ViniGodoy disse, vai sair algo assim:
Pra que precisa de DTO's?
E parece que você vai delegar toda a lógica pro DAO ou view, Tem certeza que isso é bom?

Cara, DTO é da década de 70! Se você não usa EJB 2.1 pra baixo, é quase certeza que você não vai precisar deles.
E tenta sempre usar três camadas (apresentação, negócio, integração com a base). Cadê a camada de negócio na sua arquitetura?

Bruno Laturner wrote:] Já que a pergunta é sobre arquitetura:

Conexão é uma JFrame?
Objetos que só guardam dados são conexões?
Objetos que só fazem a interface com a persistência são objetos que guardam dados?
Formulários acessam o banco diretamente?
Essas "Start" faz tudo isso que disse acima?


Igor, muito mais que herança, coesão ajuda a ter um bom design OO. Herança tava na moda nas décadas de 80 e 90. Agora é "out", não é fashion!
Há maneiras melhor para conseguir aproveitamento de código.

Pergunta aos seus professores já ouviram falar da GoF. Sem GoF vai ficar difícil conseguir uma boa arquitetura e OO.

Rafael Fiume.
Yes, Nós Temos Bananas

Sun Certified Programmer for the Java Platform, Standard Edition 6
Sun Certified Web Component Developer for the Java Platform, Enterprise Edition 5

Nullius in verba.
"A palavra de nenhum homem será a final."
Lema da Royal Society, associação de cientistas de Londres, em 1660. Entre os seus membros e presidentes esteve Isaac Newton.
[Email]
Igor Novaes
JavaBaby
[Avatar]

Membro desde: 21/03/2007 21:07:43
Mensagens: 95
Offline


Cara, DTO é da década de 70! Se você não usa EJB 2.1 pra baixo, é quase certeza que você não vai precisar deles.


Rafael, vc já ouviu falar em "conceituar uma classe" para o sistema? Pois é disso que eu cito como DTO (padrão java bean - getters and setters).


Herança tava na moda nas décadas de 80 e 90. Agora é "out", não é fashion!


Eu acho que sistema, ainda mais com Java, sem herança de classe é como tomar sopa de garfo. Desculpe-me, mas Herança é fundamental e existe pra ser usada. Se não eu vou voltar pro ASP.

Mas é isso mesmo - eu acho que estas coisas são bastante complexas e eternamente discutíveis.
[MSN]
Bruno Laturner
GUJ Expert
[Avatar]

Membro desde: 18/02/2008 16:17:53
Mensagens: 3002
Offline

Java Beans != getters e setters

DTOs != Java Beans

Herança != Reuso de implementações

Tua arquitetura != Orientada a Objeto

A resposta acima foi achada em menos de 5 minutos no google.
The prisoner falls in love with his chains. --E.W. Dijkstra
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20581
Localização: Curitiba/PR
Offline

DTOs cheiram a structs do C. Aliás, nunca vi uma razão real para utiliza-los.
Eles adicionam muita redundância ao código.

No caso de aplicação desktop a camada Controller também não precisa ser tão grande. O mecanismo de eventos da própria linguagem pode se encarregar disso. Caso você queira computação distribuída em alguns pontos, o RMI cuida disso.

Vai ser muito mais transparente, mais simples e sem parafernalhas.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
Igor Novaes
JavaBaby
[Avatar]

Membro desde: 21/03/2007 21:07:43
Mensagens: 95
Offline

Pois bem,
Neste caso, como eu deveria pensar ao construir minha aplicação desktop com swing? Como deveria arquitetar?
E mergulhar em EJB 3.0 para aplicações de pequeno e médio porte é uma prática desnescessária?

Vlw...
[MSN]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team