Arquitetura de uma aplicação Swing  XML
Índice dos Fóruns » Interface Gráfica
Autor Mensagem
carneiro
JavaEvangelist
[Avatar]

Membro desde: 07/04/2005 11:37:42
Mensagens: 328
Offline

Olá pessoal, beleza pura com vcs?

Para WEB, temos o MVC, que é ótimo!

Agora, gostaria de receber dicas sobre como projetar bem uma aplicacao swing, como dividir visualizacao de negócios, etc...

Valeu!

Davi Luan Carneiro
Desenvolvedor JEE
[Email] [MSN]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

Ora, usando MVC!

O MVC não pressupõe que você esteja montando um sistema pra web ou pra desktop.

Mas se o que você está procurando é um framework que ajude a simplificar o MVC em uma aplicação Swing, você pode testar o xWork http://www.opensymphony.com/xwork/ ou então o Spring RCP http://www.springframework.org/spring-rcp.

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
carneiro
JavaEvangelist
[Avatar]

Membro desde: 07/04/2005 11:37:42
Mensagens: 328
Offline


Me desculpem aí pessoal, esse tópico devia estar na parte relacionada a GUIs, mas sem querer coloquei aqui. Os moderadores poderiam transferir esse topico para o local adequado.

Davi Luan Carneiro
Desenvolvedor JEE
[Email] [MSN]
douglasfs
JavaEvangelist
[Avatar]

Membro desde: 31/12/2002 17:50:02
Mensagens: 305
Localização: São Paulo / Brasil
Offline

Olá,

Acredito que minha experiência seja parecida com a sua, pois eu sempre trabalhei com sistemas em Java para a WEB, porém no projeto que estou trabalhando atualmente é a primeira vez que eu trabalho com frontends em Swing (não desenvolvo as views, trabalho somente com o backend J2EE).

Estamos usando Swing pois o projeto exige que as interfaces humanas tenham um alto grau de usabilidade (estamos migrando um projeto já existente feito em Delphi), basicamente o usuário irá baixar os módulos através do Java Web Start.

Depois de uma boa garimpada pela Internet, cheguei a seguinte conclusão de arquitetura (no meu caso o sistema tem que ter fail-over,escalável, etc, consequentemente ele rodará em Cluster) :

Frontend Swing <> Business delegate <> Remote Façade <> POJO Business Logic <> iBatis DB Layer <> RDBMS

Frontend Swing - Minha camada de apresentação.

Business delegate - Resposável por interagir com a camada remota através de um Service Locator, por questões de performance, eu faço cache do EJBHome.

Remote Façade - Esse pattern foi Implementado com EJB (Session Beans Stateless), repare que eu não uso o Session Façade (pelo que eu entendi no livro no Martin Fowler a diferença básica entre ambos é que o Session Façade aceita lógica de negócios dentro dele, no meu caso eu deixo essa tarefa para Classes POJO , pois acima de tudo facilita os testes com o JUnit e não está acoplado a nenhum EJB)

POJO Business Logic - Onde se concentra a lógica de negócios, por estar concentrado em um POJO facilita o reuso, manutenção, testabilidade, etc. Eu implementei utilizando o Pattern Command, poderia usar também um Service Layer.

iBatis DB Layer - O framework que eu utilizo para a persistência de objetos, responsável por toda comunicação com o RDBMS, uma abordagem interessante para performance é utilizar o mecanismo de cache dele ou delegar para uma outra API (no meu caso eu utilizo o OSCache).

RDBMS - Utilizo o SQL Server 2000 para a persistência dos dados

As poucos eu estou refatorando essa arquitetura, mas acredito que seje um bom ponto de partida.

Espero telo ajudado.

[]s

Douglas

SCJP 1.4, SCWCD 1.4, SCBCD 5.0 beta
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

douglasfs wrote:
POJO Business Logic - Onde se concentra a lógica de negócios, por estar concentrado em um POJO facilita o reuso, manutenção, testabilidade, etc. Eu implementei utilizando o Pattern Command, poderia usar também um Service Layer.


Ou deixar o design procedural de lado e usar um Domain Model

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
douglasfs
JavaEvangelist
[Avatar]

Membro desde: 31/12/2002 17:50:02
Mensagens: 305
Localização: São Paulo / Brasil
Offline

pcalcado wrote:
douglasfs wrote:
POJO Business Logic - Onde se concentra a lógica de negócios, por estar concentrado em um POJO facilita o reuso, manutenção, testabilidade, etc. Eu implementei utilizando o Pattern Command, poderia usar também um Service Layer.


Ou deixar o design procedural de lado e usar um Domain Model


Sim, com certeza pcalcado , como falei no meu último post, aos poucos eu estou refatorando a arquitetura ...

Mas no geral, vc acredita que essa arquitetura é válida como ponto inicial ?

SCJP 1.4, SCWCD 1.4, SCBCD 5.0 beta
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

douglasfs wrote:
Mas no geral, vc acredita que essa arquitetura é válida como ponto inicial ?


Com a experiência de quem tem literalmente centenas de Commands para manter: não.

Ainda pretendo fazer um post sobre como refatorar um elefante, mas posso adiantar o seguinte: Não escreva código novo como Command. Crie um domínio e vá utilizando ele toda vez que precisar corrigir bug ou acrescentar algo novo.

Shoes

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
Ironlynx
Moderador
[Avatar]

Membro desde: 02/05/2003 01:06:41
Mensagens: 3477
Localização: The other side of the screen
Offline


Com a experiência de quem tem literalmente centenas de Commands para manter: não.
Ainda pretendo fazer um post sobre como refatorar um elefante, mas posso adiantar o seguinte: Não escreva código novo como Command. Crie um domínio e vá utilizando ele toda vez que precisar corrigir bug ou acrescentar algo novo.

Philip, esse suposto isolamento é ótimo se vc tem um sistema "normal", digamos assim.Numa aplicação prevalente por possuirmos um único objeto raiz(Um verdadeiro Deus na aplicação), na qual todos os demais dependem(e haja nível de invaginação de objetos...), command ainda rula...

Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/
[WWW]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

Ironlynx wrote:
Philip, esse suposto isolamento é ótimo se vc tem um sistema "normal", digamos assim.Numa aplicação prevalente por possuirmos um único objeto raiz(Um verdadeiro Deus na aplicação), na qual todos os demais dependem(e haja nível de invaginação de objetos...), command ainda rula...


Não deixa de ser irônico isso. A gente tem que quebrar o encapsulamento de uma classe para usar SGBDR, aí uma solução de "persistência transparente" exige que você modele seus algoritmos como Commands, destruindo seu Domain Model e criando código procedural...

Cada vez mais eu acredito que persistência transparente em java só o dia que que a JVM for projetada para isso.

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
Mauricio Linhares
Moderador
[Avatar]

Membro desde: 09/01/2005 23:28:22
Mensagens: 3717
Localização: João Pessoa, Paraíba - Brasil
Offline

pcalcado wrote:
Cada vez mais eu acredito que persistência transparente em java só o dia que que a JVM for projetada para isso.


Acho que é a coisa que o Gavin King mais repete no Hibernate In Action, "paradigm mismatch". Enquanto não houver um meio simples, escalável e rápido de se persistir e buscar "objetos" da linguagem, não tem jeito.

Eu acho que a persistência em cascata e a navegação de grafos no Hibernate são de uma ajuda imensa, mas o RDBMS continua lá, as tabelas continuam lá, só tem um adaptador no meio.

O Prevayler tem uma idéia interessante e o JXPath tem uma maneira simples de trafegar em um grafo de objetos, porque não juntar os dois?

Talvez o maior problema é que as maiores empresas que trabalham com bancos não estão muito interessadas nisso não....

Meu blog sobre desenvolvimento | My Last.fm | @mauriciojr

Screencast de Introdução a linguagem Objective-C
[WWW]
Ironlynx
Moderador
[Avatar]

Membro desde: 02/05/2003 01:06:41
Mensagens: 3477
Localização: The other side of the screen
Offline

A gente tem que quebrar o encapsulamento de uma classe para usar SGBDR, aí uma solução de "persistência transparente" exige que você modele seus algoritmos como Commands, destruindo seu Domain Model e criando código procedural...

Totalmente Philip!!!Pior é q quanto maior o número de Objetos dependentes, pior fica!Um é sempre inserido dentro de outro, e assim sucessivamente...(Arrrrggghh!)
Adeus independência.É dependência direta do objeto predecessor e pior, ficar chamando o Objeto Raiz nas transactions(imagine apenas uns 5 níveis de objetos raiz para vc ver o saco q fica...)


Não basta persistir...tem que prevalecer!
Ironlynx
Anarquista de Sistemas
http://osereojava.blogspot.com/
[WWW]
dukejeffrie
Virtual Machine Man
[Avatar]

Membro desde: 21/08/2002 03:53:28
Mensagens: 661
Offline

Mas uma coisa nao tem nada a ver com outra, tem?

Um comando (do Prevayler ou nao) precisa saber achar o objeto.



Eu acredito que o Command Pattern e um dominio rico nao sao excludentes... mas eu ja tive algumas dores de cabeca com o Hibernate pra dizer que tem vezes que a gente precisa ser condescendente... []

[]s!

Brevity is the soul of wit
[Email] [WWW] [MSN] [ICQ]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

dukejeffrie wrote:
Eu acredito que o Command Pattern e um dominio rico nao sao excludentes... mas eu ja tive algumas dores de cabeca com o Hibernate pra dizer que tem vezes que a gente precisa ser condescendente... []


Não são, mas só se você usar o Command para o que ele foi feito:
GoF wrote:
Applicability

Use the Command pattern when you want to

* parameterize objects by an action to perform, as MenuItem objects did above. You can express such parameterization in a procedural language with a callback function, that is, a function that's registered somewhere to be called at a later point. Commands are an object-oriented replacement for callbacks.

* specify, queue, and execute requests at different times. A Command object can have a lifetime independent of the original request. If the receiver of a request can be represented in an address space-independent way, then you can transfer a command object for the request to a different process and fulfill the request there.

* support undo. The Command's Execute operation can store state for reversing its effects in the command itself. The Command interface must have an added Unexecute operation that reverses the effects of a previous call to Execute. Executed commands are stored in a history list. Unlimited-level undo and redo is achieved by traversing this list backwards and forwards calling Unexecute and Execute, respectively.

* support logging changes so that they can be reapplied in case of a system crash. By augmenting the Command interface with load and store operations, you can keep a persistent log of changes. Recovering from a crash involves reloading logged commands from disk and reexecuting them with the Execute operation.

* structure a system around high-level operations built on primitives operations. Such a structure is common in information systems that support transactions. A transaction encapsulates a set of changes to data. The Command pattern offers a way to model transactions. Commands have a common interface, letting you invoke all transactions the same way. The pattern also makes it easy to extend the system with new transactions.



Pense no Command como um ponteiro de função em C.

A propósito, ótimo texto: Transparent Persistence, Transient and Detached Objects, and DTO's não muito relacionado, mas bom texto mesmo, pena que ainda incompleto

Shoes

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
Thiago Senna
GUJ Master
[Avatar]

Membro desde: 11/02/2005 08:08:02
Mensagens: 1595
Offline

Olá!

Vi uma abordagem muito legal do pattern command no Livro Hibernate In Action, no capítulo 8.

O autor usou o command dentro de um Sessio Bean. Ou seja, o session recebia a requisição e delegava a tarefa para o command. O command por sua vez se limitava em fazer chamadas ao DAO ou chamar métodos no domínio, sem usar o command para fazer programação procedural.
Ele começa com um código dentro do command bastante simples, onde algumas lógicas de negócio estão no command, e aos poucos, no decorrer do capítulo, ele vai mostrando como melhorar seu código e mover as lógicas de negócios para os pojos e principalmente, define o que deve ficar no pojo, e o que deve ficar no DAO!

O que achei mais interessante de se utilizar o command é que vc pode testar a operação que ele executa sem depender de qualquer conteiner que seja, já que o command é um objeto java simples. Assim, fica mais fácil de testar a operação e ainda por cima é mais fácil de reaproveitar.


Abraços!
Thiago
[Email]
pcalcado
Moderador
[Avatar]

Membro desde: 08/03/2004 17:19:35
Mensagens: 5174
Localização: Sydney - Australia
Offline

Thiago Senna wrote:
O que achei mais interessante de se utilizar o command é que vc pode testar a operação que ele executa sem depender de qualquer conteiner que seja, já que o command é um objeto java simples. Assim, fica mais fácil de testar a operação e ainda por cima é mais fácil de reaproveitar.



Você não repcisa de um Command para isso, basta colcoar a lógica em POJOs

Phillip Calçado "Shoes"
http://fragmental.tw/
http://blog.fragmental.com.br/
"It is unfortunate that much of what is called 'object-oriented programming today is simply old style programming with fancier constructs." - Alan Kay
[Email] [WWW] [Yahoo!] [MSN]
 
Índice dos Fóruns » Interface Gráfica
Ir para:   
Powered by JForum 2.1.8 © JForum Team