Arquitetura com Swing

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.

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.

[quote=Igor Novaes]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.
[/quote]

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.) :stuck_out_tongue:

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

Mão na massa! :smiley:

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…

[quote=Igor Novaes]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.[/quote]

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.

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.

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

[quote=ViniGodoy]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…[/quote]
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! :lol: 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?

[quote=Bruno Laturner]] 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? [/quote]

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! :lol:
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, 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).

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.

Java Beans != getters e setters

DTOs != Java Beans

Herança != Reuso de implementações

Tua arquitetura != Orientada a Objeto

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.

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…