Arquitetura de sistema Swing

Salve Brothers of Java!!

Gostaria de de discutir a forma em que estou construindo meu sistema Swing em camadas.

Bom, a tempos atrás estava eu procurando uma forma de fazer o mapeamento objeto-relacional
até que me deparei com este artigo
e gostei da forma de mapeamento.

Bom, mas a partir desta forma de mapeamento, eu comecei a bolar uma forma de para melhor me adaptar.
Vou colocar um exemplo, para que fique mais clara a forma em que estou desenvolvendo:

Por exemplo no cadastro de usuários.Tenho minha classe(bean) Usuario:

public class Usuario{
	private int iCodigo;
	private String sLogin;
	private Sring sSenha;
	
	//Métodos get set simples
	//...
}

uma interface para o DAO:

[code]
public interface IUsuarioDAO{
void incluir(Usuario usuario) throws MinhaExcecao;
void alterar(Usuario usuario) throws MinhaExcecao;
void excluir(Usuario usuario) throws MinhaExcecao;

boolean valida(Usuario usuario) throws MinhaExcecao, UsuarioNaoEncontradoException;
///...

}[/code]

o DAO:

[code]
class UsuarioDAO implements IUsuarioDAO{

private static UsuarioDAO usuarioDAO = new UsuarioDAO();

private UsuarioDAO{
}

public void incluir(Usuario usuario){
	.
	.
	.
}

public void alterar(Usuario usuario){
	.
	.
	.
}

public void excluir(Usuario usuario) throws MinhaExcecao{
	.
	.
	.		
}

public static UsuarioDAO getInstancia(){
	return usuarioDAO;
}

//...e por aí vai...

}[/code]

Minha classe de negócio,

[code]
public class CadastroDeUsuarios{
private IUsuarioDAO usuarioDAO = FactoryUsuarioDAO.getInstancia().getDAO();

public void gravar(Usuario usuario){

}

public void excluir(Usuario usuario) throws MinhaExcecao{
	usuarioDAO.excluir(usuario);
}

}[/code]

E minha Factory:

[code]
class FactoryUsuarioDAO{
private static FactoryUsuarioDAO factoryUsuarioDAO = new FactoryUsuarioDAO();

private FactoryUsuarioDAO(){
	//Carrega informações de qual DAO deve ser carregado em um properties ou XML
}

public IUsuarioDAO getDAO(){
	//faz os testes e retorna a instancia a ser usada
	return UsuarioDAO.getInstancia();
}

public static FactoryUsuarioDAO getInstancia(){
	return factoryUsuarioDAO;		
}

}[/code]

Bom daí o que faço:

No meu view(JFrame, JInternalFrame e etc...), instancio um objeto do tipo CadastroDeUsuarios(que aplico as regras de negócio), que por sua vez obtém através do Factory o DAO que faz as operações no banco.Por enquanto não estou trabalhando com ele distribuído, mas caso venha, crio uma interface para a classe de cadastro(Business).

Bom, as vezes acho que estou escrevendo demais, mas me parece que é assim mesmo.Gostaria que dessem suas opniões para discutirmos se
está bom e se não qual é a melhor forma.

O que acham?! :roll:

Bom, espero ter sido claro, e espero críticas também.

A Paz!!

Ninguém?! :shock:

Pirei, pensei que aqui seria o fórum que teriamos mais discussões…

A Paz!!

[quote=paulohbmetal]Ninguém?! :shock:

Pirei, pensei que aqui seria o fórum que teriamos mais discussões…

A Paz!![/quote]

Tbm estava esperando a discussão :roll: . Já vi aqui e no JavaFree esse tipo de assunto dar briga :twisted: . Cheguei a fazer o diagrama de classes e usar o “Acompanhar este tópico”. :?

Gostei da sua arquitetura, entretanto estou aguardando outras idéias. :wink:

Fui!

[quote=Betinhum][quote=paulohbmetal]Ninguém?! :shock:

Pirei, pensei que aqui seria o fórum que teriamos mais discussões…

A Paz!![/quote]

Tbm estava esperando a discussão :roll: . Já vi aqui e no JavaFree esse tipo de assunto dar briga :twisted: . Cheguei a fazer o diagrama de classes e usar o “Acompanhar este tópico”. :?

Gostei da sua arquitetura, entretanto estou aguardando outras idéias. :wink:

Fui![/quote]

Pois é.Estranho não?!Mas eu não estou querendo arranjar encrenca, e se vierem críticas aceito numa boa.

Mas parece que a galera saturou… :lol:

Vou esperar.

A Paz!!

[quote=paulohbmetal][quote=Betinhum][quote=paulohbmetal]Ninguém?! :shock:

Pirei, pensei que aqui seria o fórum que teriamos mais discussões…

A Paz!![/quote]

Tbm estava esperando a discussão :roll: . Já vi aqui e no JavaFree esse tipo de assunto dar briga :twisted: . Cheguei a fazer o diagrama de classes e usar o “Acompanhar este tópico”. :?

Gostei da sua arquitetura, entretanto estou aguardando outras idéias. :wink:

Fui![/quote]

Pois é.Estranho não?!Mas eu não estou querendo arranjar encrenca, e se vierem críticas aceito numa boa.

Mas parece que a galera saturou… :lol:

Vou esperar.

A Paz!![/quote]

O Fórum do GUJ está estranho mesmo (deve ser pq é 100% java agora… :wink: )… Qlqr coisa estou por aqui. 8)

Fui!

DAO? Olhe isso: http://www.javaworld.com/javaworld/jw-03-2002/jw-0301-dao.html

Mas eu não curti muito a idéia do cara. Primeiro, “IUsuarioDAO”? Que maneira de nomeação mais tosca! Segundo e mais importante do que a convenção: para quê criar diversas interfaces para vários DAOs? Crie uma única interface e faça com que todos a implementem. Simples assim.

Agora entendi, por que estes tópicos dão encrenca… :slight_smile: Cara calma.

Tudo bem pode até ser, mas se eu precisar de um método mais específico?

A Paz!!

Método específico? Tipo o que?

Mas, ah!, fala sério. Aquele tipo de convenção é muito feia! :frowning:

[quote=Daniel Quirino Oliveira]Método específico? Tipo o que?

Mas, ah!, fala sério. Aquele tipo de convenção é muito feia! :([/quote]

Tipo sei lá buscar as dependência deste usuario, como acesso.Qual convenção vc usa?

A Paz!!

Eu tb não curti muito, principalmente onde tu diz que instancia na tua View as regras de negocio. Se tu quer usar MVC ta faltando coisa nessa arquitetura.
Outro ponto, framework nenhum? Ta fazendo tudo no braco do zero?

[quote=paulohbmetal][quote=Daniel Quirino Oliveira]Método específico? Tipo o que?

Mas, ah!, fala sério. Aquele tipo de convenção é muito feia! :([/quote]

Tipo sei lá buscar as dependência deste usuario, como acesso.Qual convenção vc usa?

A Paz!![/quote]

Bom se tu precisar de algo mais especifico ai tu cria uma classe mais especifica, faca isso quando necessário agora nao faça como você fez só pq acha que vai precisar de algo especifico mais pra frente.

]['s

Mas onde eu iria instanciar?Como minha GUI teria acesso a classe de negócios?

Não, estou fazendo em JDBC puro.Talvez possa usar Hibernate mais pra frente.

Quando digo view, quero dizer GUI.Não quer dizer que estou usando o MVC.
Mas tudo bem, agora só estou esperando exemplos, pois até o momento só li críticas e ninguém me mostrou como “é” o correto.

Vamos lá galera postem códigos pois tenho certeza que muita gente vai aprender/tirar dúvidas com esse tópico, inclusive eu. :wink:

A Paz!!

Mas deveria. E não porque MVC é bonito. É porque, se bem implementado, funciona. :wink:

No seu caso, parece que tá faltando separar melhor as coisas, implementar alguém (controller) que intermedie as chamadas da sua view para os seus objetos de negócio. Se isso não for feito, você estará amarrando demais a sua view com os objetos de negócio, e isso pode te dar dor de cabeça, principalmente quando você precisar mudar qualquer coisa na camada de negócio.

[]'s

Vc tem algum exemplo de controller fazendo isso?Seria implementado por um facade?

A Paz!!

Não exatamente.

Não tenho nenhum exemplo de controller pra aplicações desktop. Mas você pode dar uma olhada no Pendulum, que é uma implementação de MVC pra desktop baseada no XWork e no PicoContainer.

[]'s

O Controlador é quem recebe toda e qualquer solicitação da visualização e repassa para o lugar correto.

Falando assim, pode pareceruma super-classe faz-tudo, mas não, o controlador apenas repassa a solicitação para outro trabalhador, é o nosso famoso ‘despachante’, tão comum em repartições públicas brasileiras :lol:

[]s

Não exatamente.

Não tenho nenhum exemplo de controller pra aplicações desktop. Mas você pode dar uma olhada no Pendulum, que é uma implementação de MVC pra desktop baseada no XWork e no PicoContainer.

[]'s[/quote]

Não, acho que vou ficar com o DAO mesmo…

Agora gostaria de ídéias para nomenclatura, já que está parecendo tão “tosca”…

A Paz!!

[quote=pcalcado]O Controlador é quem recebe toda e qualquer solicitação da visualização e repassa para o lugar correto.

Falando assim, pode pareceruma super-classe faz-tudo, mas não, o controlador apenas repassa a solicitação para outro trabalhador, é o nosso famoso ‘despachante’, tão comum em repartições públicas brasileiras :lol:

[]s[/quote]

Mas se ele somente “repassa”, qual seria a real vantagem de usá-lo?:roll:

A Paz!!

Veja bem, DAO é uma coisa, Controller é outra completamente diferente!

Tem certeza que você leu as minhas respostas? Eu falei sobre isso na minha primeira:

[]'s

[quote=paulohbmetal]
Mas se ele somente “repassa”, qual seria a real vantagem de usá-lo?:roll: [/quote]

Porque você não espalharia suas classes de negócio (sejam interfaces para elas, façades…) pela sua apresentação.

[]s