Programa Organização e convenções de código

11 respostas
L

Bom dia galera !!!

Tenhu meu projeto de cadastro de clientes e estou meio confuso em organizar meu codigos ,esta funcionando tudu mas o problema é que esta tudo no JFrame.

caso alguem possa me ajudar ou explicar como ajustar !!!

valeu!!

em Mvc !!! model,view,controller.

Poderia ser pelo email meu

[color=blue] [email removido][/color]

11 Respostas

nel

Bom dia.

O que seria, estar tudo no seu JFrame?
Pelo nome do seu projeto, eu deduzo que você utilize JDBC ou outro meio de persistência no banco de dados, perfeito?

Partindo desta premissa, o ideal é que você possa utilizar algo próximo ou o até mesmo (ideal) o padrão MVC, não é algo tão simples e tem alguns posts aqui no GUJ sobre este assunto, mas resumidamente, a ideia é desacoplar funções, no sentido de que, por exemplo, na camada de visualização (interface gráfica) não tenha código, como por exemplo, ResultSet, um Select ou algo deste tipo, entende?

Uma ótima prática de programação é que você consiga separar as funções de seu projeto em camadas. Vamos supor que você aplique as regras de negócios na camada de visualização, quando você precisar adicionar outro método e/ou ajustar algum já existente, você terá que alterar código na sua camada de apresentação, sem falar em questão de elegibilidade.

Então, o meu conselho, analise com calma o seu projeto e separa as camadas, eu diria até para separar em três camada básicas:

1 - Apresentação (suas telas e etc)

2 - Regras de négocios (seus if´s e etc, exemplo:  vou persistir um produto se o preço dele for maior que R$50,00)

3 - Camada de persistência (aqui, você faz o select, update, insert, delete e etc, seus result set ou outra API)

Espero ter ajudado :slight_smile:
Abraços.

L
nel:
Bom dia.

O que seria, estar tudo no seu JFrame?
Pelo nome do seu projeto, eu deduzo que você utilize JDBC ou outro meio de persistência no banco de dados, perfeito?

Então nel , ajudo sim mas sabe o que eu fiz (burrisse minha eu acho) olha só como esta só pra vc ter uma duvida um pedaço do projeto!

private void btnSalvarActionPerformed(java.awt.event.ActionEvent evt)  {     

		d.setcd_Codigo(Integer.parseInt(txtCodigo.getText()));
		d.settxt_NomeSegurado(txtNomesegurado.getText());
		d.setdt_Nascimento(txtDataNascimento.getText());
		d.setcd_Sexo(cmbSexo.getSelectedItem().toString());
		d.setcd_CPF(txtCpf.getText());
		d.settxt_End(txtEndereco.getText());
		d.settxt_Bairro(txtBairro.getText());
		d.setcd_NumeroRes(Integer.parseInt(txtNumero.getText()));
		d.settxt_Complmento(txtComplemento.getText());
		d.setcd_Produto(cmbProduto.getSelectedItem().toString());  
		d.setval_Premio(Integer.parseInt(txtPremio.getText()));


		try {  

			con=DAO.getConn();
			System.out.println(con);

			String sql = "INSERT into tb_Cadastro(cd_Codigo, txt_NomeSegurado, dt_Nascimento, cd_Sexo, cd_CPF, txt_End, txt_Bairro, cd_NumeroRes, txt_Complmento, cd_Produto, val_Premio)" + " VALUES(%s, '%s', '%s', '%s', '%s', '%s', '%s', %s, '%s', '%s', %s)";

			sql = String.format(sql, d.getcd_Codigo(), 
					d.gettxt_NomeSegurado(),
					d.getdt_Nascimento(),
					d.getcd_Sexo(),
					d.getcd_CPF(),
					d.gettxt_End(),
					d.gettxt_Bairro(),
					d.getcd_NumeroRes(),
					d.gettxt_Complmento (),
					d.getcd_Produto(),
					d.getval_Premio());


			//System.out.println(sql);
			pstm = con.prepareStatement(sql);     
			pstm.executeUpdate(); 
			con.commit();

			Mensagem mensagem = new Mensagem(this, "Confirmação", "Confirmar gravação do cadastro ", Mensagem.MSG_BOTAO_SIM_NAO_CANCELA, Mensagem.MSG_ICONE_PERGUNTA);
			if (mensagem.getBotaoClicado() == Mensagem.MSG_CLICK_SIM ) 
			{
				new  Mensagem(this,"Aviso", "Salvo com sucesso", Mensagem.MSG_BOTAO_OK, Mensagem.MSG_ICONE_INFORMACAO);

			}

		}

		catch (SQLIntegrityConstraintViolationException e) {

			Mensagem mensagem = new Mensagem(this, "ERRO", " Produto Cadastrado ! ", Mensagem.MSG_BOTAO_OK, Mensagem.MSG_ICONE_ERRO);
			System.out.println("Erro !!!!");

		}
		catch(Exception e){
			System.out.println(e.toString());
		}        
		finally{

			try{
				pstm.close(); 
				//con.close();
			}catch(Exception e) {   
				e.printStackTrace();   
				return ;   
			}   
		}   

	}

seria o seguinte todos os inserts ,consulta , del e tc fiz no JFrame.
por isso achu que vou usar o MVC pra dar uma melhorada nele,ja que usam muito ele!

Anime

Acho interessante abordar esse tema…

http://www.nacaolivre.com.br/java/convencoes-de-codigo-java/

nel

Fez exatamente como eu imaginei. Não se trata de burrice e sim de, provavelmente, falta de prática e/ou experiência.
Neste seu JFrame, apenas “capture” as informações necessarias e popule um Objeto, vamos imaginar, um Objeto Produto.

Após este Objeto Produto estar preenchido, envie-o para a camada de Regras de Negócios, lá, você fará todas as validações necessárias a partir deste objeto e se ele for uma Objeto válido, de acordo com as regras impostas por você, você o envia para a camada de persistência, que será responsavél exatamente por criar os ResultSet, PreparedStatement e etc, mas, nesta camada, ela vai “deduzir” que aquele Objeto já é válido e simplesmente fará a persistência, remoção, consulta…ok?

Creio que o seu projeto será muito mais legível, correto e fácil de uma possível manutenção.
Abraços.

kanxabd

Cara, da uma olhada: http://www.oracle.com/technetwork/articles/javase/index-142890.html#1
talvez te ajude a definir as camadas e, assim desacoplar seu sistema.

L

nel:
Fez exatamente como eu imaginei. Não se trata de burrice e sim de, provavelmente, falta de prática e/ou experiência.
Neste seu JFrame, apenas “capture” as informações necessarias e popule um Objeto, vamos imaginar, um Objeto Produto.

Após este Objeto Produto estar preenchido, envie-o para a camada de Regras de Negócios, lá, você fará todas as validações necessárias a partir deste objeto e se ele for uma Objeto válido, de acordo com as regras impostas por você, você o envia para a camada de persistência, que será responsavél exatamente por criar os ResultSet, PreparedStatement e etc, mas, nesta camada, ela vai “deduzir” que aquele Objeto já é válido e simplesmente fará a persistência, remoção, consulta…ok?

Creio que o seu projeto será muito mais legível, correto e fácil de uma possível manutenção.
Abraços.

Esta ajudando muito estou entendo perfeitamente, tbm o que mais faço e mexo são o Ireports relatorios e banco sql.

L

kanxabd:
Cara, da uma olhada: http://www.oracle.com/technetwork/articles/javase/index-142890.html#1
talvez te ajude a definir as camadas e, assim desacoplar seu sistema.

esse site ja estava lendo é bom pra caramba é com ele que to pegando a pratica e entendimento !
valeu !

gomesrod

Lokit,

Realmente está um pouco ruim, mas aí vai uma boa notícia: A vontade de melhorar é o passo mais importante e mais difícil para se escrever um bom código. Parabéns…
Tem caras por aí com 10 anos de programação fazendo sistema porco e achando que sabe tudo.

O nel fez um bom resumo do que precisa ser feito, vou acrescentar mais algumas dicas:

  • Código da camada de negócio não exibe mensagem e nem interage com o usuário. Faça com que as situações inesperadas se transformem em exceções que devem ser tratadas na apresentação.

  • System.out.println() não deve ser usado para exibir mensagens em um sistema Desktop, afinal o usuário não vê a console. Exiba as mensagens (de maneira amigável para entendimento do usuário) na janela ou em um messagebox. Se desejar, grave detalhes do problema em um arquivo de log.

  • Vá refatorando aos poucos - primeiro arranque o código do JFrame em um objeto de negócio. Faça testes para certificar-se que continua funcionando. Depois separe a persistência em um Dao. Teste. Depois procure códigos repetidos que podem ser isolados em uma classe separada. E assim por diante…

L

gomesrod:
Lokit,

Realmente está um pouco ruim, mas aí vai uma boa notícia: A vontade de melhorar é o passo mais importante e mais difícil para se escrever um bom código. Parabéns…
Tem caras por aí com 10 anos de programação fazendo sistema porco e achando que sabe tudo.

O nel fez um bom resumo do que precisa ser feito, vou acrescentar mais algumas dicas:

  • Código da camada de negócio não exibe mensagem e nem interage com o usuário. Faça com que as situações inesperadas se transformem em exceções que devem ser tratadas na apresentação.

  • System.out.println() não deve ser usado para exibir mensagens em um sistema Desktop, afinal o usuário não vê a console. Exiba as mensagens (de maneira amigável para entendimento do usuário) na janela ou em um messagebox. Se desejar, grave detalhes do problema em um arquivo de log.

  • Vá refatorando aos poucos - primeiro arranque o código do JFrame em um objeto de negócio. Faça testes para certificar-se que continua funcionando. Depois separe a persistência em um Dao. Teste. Depois procure códigos repetidos que podem ser isolados em uma classe separada. E assim por diante…

Verdade!!!

System.out.println() então esse system eu só coloko pra ver o que esta sendo impresso no console.

aqui

//System.out.println(sql);

eu vejo que ele mostrava qq preenchido na tela ele mostrava o nome e o Componente descrito no campo.

nel

O Lokit fez boas observações.
Mas o System.out.println() podes utilizar como um “Debug” temporário, eu diria. “Estou persistindo o Objeto…”, apenas para que você possa usar em teus testes, assim, tens a certeza que ele está executando o caminho desejado.

Aproveitando o “gancho”, crie uma classe que gere um Log para você, em algum diretório default, assim, se caso instalar em um cliente ou em outro PC, quando ocorrer alguma excessão, tende a ficar mais fácil a identificação do que está ocorrendo. Se não me engano, é possível utilizar o log4j, mas, senão, cria na “mão” mesmo, usando PrintWriter :slight_smile:

Mas siga o conselho do Lokit, migre camada por camada, pois, se resolver criar todas as novas e migrar tudo ao mesmo tempo, pode acabar se perdendo e depois para arrumar, meu amigo, é dificil (trabalhoso) hein!

Qualquer coisa, estamos ai :slight_smile:
Abraços!

L

nel:
O Lokit fez boas observações.
Mas o System.out.println() podes utilizar como um “Debug” temporário, eu diria. “Estou persistindo o Objeto…”, apenas para que você possa usar em teus testes, assim, tens a certeza que ele está executando o caminho desejado.

Aproveitando o “gancho”, crie uma classe que gere um Log para você, em algum diretório default, assim, se caso instalar em um cliente ou em outro PC, quando ocorrer alguma excessão, tende a ficar mais fácil a identificação do que está ocorrendo. Se não me engano, é possível utilizar o log4j, mas, senão, cria na “mão” mesmo, usando PrintWriter :slight_smile:

Mas siga o conselho do Lokit, migre camada por camada, pois, se resolver criar todas as novas e migrar tudo ao mesmo tempo, pode acabar se perdendo e depois para arrumar, meu amigo, é dificil (trabalhoso) hein!

Qualquer coisa, estamos ai :slight_smile:
Abraços!

valeu pessoal ajudo bastante ,demoro bastante pra montar tudu dinovo um trabalhão mas foi tudu resolvido!! :lol:

Criado 3 de setembro de 2010
Ultima resposta 3 de set. de 2010
Respostas 11
Participantes 5