Dica em aplicação Desktop (arquitetura)

3 respostas
diegonunes.sistema

Bom dia…

Em aplicações Desktop, estou trabalhando da seguinte forma: Formulario —> Service —> DAO, conforme um artigo na java magazine que li… Estarei mostrando parte do meu codigo e queria a dica de vcs quanto a arquitetura, ficarei grato! Obrigado!!!

è um cadastro de cidade o exemplo…

FORMULARIO:

private void btSalvar1ActionPerformed(java.awt.event.ActionEvent evt) {
        if(tfNome.getText().equals("")){
            JOptionPane.showMessageDialog(null,"O Campo Cidade é Obrigatório","Aviso",JOptionPane.INFORMATION_MESSAGE);
        }
        else{    
            
            //Implementando a regra de negócio: verifica se a Cidade já existe.
            CidadeServices cidSrv = ServicesFactory.getCidadeServices();
            EstadoServices estSrv = ServicesFactory.getEstadoServices();
            
            CidadeVo cidTo = cidSrv.consultaCiadeByNome(tfNome.getText());
            
            if (cidTo != null)    
                JOptionPane.showMessageDialog(null,"Já existe esta Cidade","Aviso",JOptionPane.WARNING_MESSAGE);
            else{
                CidadeVo cidVo = new CidadeVo();
                
                //Setando os atributos de CidadeVo.
                cidVo.setNome(tfNome.getText());
 
                //Pesquisa o Codigo do estado pela sigla selecionada
                EstadoVo est = estSrv.consultaEstadoByNome((String) cbEstado.getSelectedItem());

                if(est != null)
                    cidVo.setEstado(est.getCodigo());
                
                try {
                    cidSrv.inserirCidade(cidVo);
                    JOptionPane.showMessageDialog(null,"Cidade Cadastrada com Sucesso","Aviso",JOptionPane.INFORMATION_MESSAGE);
                    limparCamposForm();
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }            
        }
    }

SERVICES: (Recebe a requisição do form e passa para o DAO)

Classe ServicesFactory

public class ServicesFactory {

    private static final FuncionarioServices funcionarioServices = new FuncionarioServices();
    private static final CidadeServices cidadeServices = new CidadeServices();
   
    public static FuncionarioServices getFuncionarioServices() {
        return funcionarioServices;
    }

    public static CidadeServices getCidadeServices() {
        return cidadeServices;
    }
}

Classe CidadeServices

public class CidadeServices {
    
    /**
    * Insere uma Cidade.
    * @param cidVo - Objeto do tipo CidadeVo.   
    * */
    public void inserirCidade(CidadeVo cidVo){
        CidadeDao cidDao = DaoFactory.getCidadeDao();
        cidDao.insertCidade(cidVo);
    }
    
    /**
    * Atualiza uma Cidade
    * @param cidVo - Objeto do tipo CidadeVo.     
    * */
    public void alterarCidade(CidadeVo cidVo){
	CidadeDao cidDao = DaoFactory.getCidadeDao();
	cidDao.updateCidade(cidVo);
    }

   .
   .
   .
}

DAO

Classe DaoFactory

public class DaoFactory {
    
    private static final FuncionarioDao funcionarioDao = new FuncionarioDao();
    private static final CidadeDao cidadeDao = new CidadeDao();     

    public static FuncionarioDao getFuncionarioDao() {
        return funcionarioDao;
    }

    public static CidadeDao getCidadeDao() {
        return cidadeDao;
    }

Classe CidadeDao

Queria saber se a validação de dados, de negocios eu faço é no meu Service? ou seja minha interface envia um bean para o meu service, nele faço as validações e ai se tudo estiver certo, envio para minha persistencia…

Muito obrigado pela atenção!!!

3 Respostas

PadrE

Hmm…

Acredito que se vc montar o Diagrama de Classes vai ficar muito mais fácil de ver onde pode ser melhorado…

Mas olhando rapidamente, achei bacana… soh n gostei muito da mensagem de aviso ficar no formulário (JOptionPane.showMessageDialog(null,“Já existe esta Cidade”,“Aviso”,JOptionPane.WARNING_MESSAGE); )…

Imagine se vc precisar validar isso em outros lugares ? Terá q repetir o mesmo código de consultar, validar e exibir msg… correndo o risco de alterar entre uma mensagem e outra… (parece paranóia, mas sei como eh trabalhoso dar manutenção nesses casos =[)

Pra mudar isso vc poderia jogar essa validação em uma das outras camadas… onde um método retornaria um Exception (Melhor que seje um criado por vc)… dessa forma, o Formulário só teria o trabalho de verificar os catch e exibir em tela da melhor forma…

Fui !

diegonunes.sistema

PadrE obrigado…

Essa é minha duvida… essas validações seria melhor eu faze-las no meu CidadeServices?

Obrigado!!!

PadrE

Eu diria que sim…

E vc poderia colocar o seu metodo inserirCidade para retornar uns Exception’s com as mensagem corretas,… e ai no formulario ver como tratar esse Exception e exibir em tela…

Em uma aplicação aki, eu tenho algumas regras de negócios no banco… em algumas procedures… e para n ter q replicar as regras na aplicação, fiz uma forma de q procedure lance um RAISE_APPLICATION_ERROR com as mensagens formatadas em um padrão… (tipo entre ##)… e qndo o meu objeto receber esse SQLException… eu consigo “limpar” a mensagem de erro mesmo e exbir em tela… sem precisar validar mais nada…

Outra situação, eh que eu coloquei alguns tratamentos nos objetos DAO, e esses retornar Exception especificos para algumas regras… dessa forma a minha camada de exibição (assim q receber esses caras) eu apenas exibo o e.getMessage() sem digitar mais nada… a n ser que seja um Exception n tratado…

Tem várias formar de se montar… muitas mesmos… as soluções que citei deram muito certo e geram uma facilidade em manutenção… mas isso pq eh uma aplicação desktop (Client/Server)…

Se fosse Web, ai seria legal deixar essa validações mais próximas da camada de paresetação… mesmo q replicadas com as regras do banco…

Fui !

Criado 5 de novembro de 2007
Ultima resposta 5 de nov. de 2007
Respostas 3
Participantes 2