Piores práticas em um unico sistema

21 respostas
V

Boa noite

Indignado, crio este tópico, para os javas iniciais não cometerem os erros que postarei neste tópico.
Estes códigos são tirados de “profissionais” que cobram de uma empresa a quantia de R$ 80,00 hora.
Vamos para a primeira:
Geracao de xml com StringBuffer (Showww!!!), acredito que eles não conheçam Jdom, jaxb… e milhares formas. Mas o que chamou a atenção é que o arquiteto disse que o sistema é internacionalizado e esta atendendo as linguas portugues Brasil e Ingles, mas encontrei a seguinte linha:

double variável = Double.parseDouble(atributo.replace(",","."));

Por hoje é só…

21 Respostas

fabiofalci

Nunca dúvide do potencial de alguém…
mas o que mas me chamou a atenção foi variável com acento! doido pra se incomodar com enconding…

E uma boa diversão aqui…
http://thedailywtf.com/

R

hahahaa acento na variavel, essa foi boa

renamed

Esse tipo de tópico é bom para que não só iniciantes, mas todos possamos aprender boas práticas de programação…

além da acentuação, o que mais preocupa é o nome da variável ser variável… 50 linhas de código depois, alguém se perderia facilmente nesse código (quem sabe até quem o escreveu também)…

sergiotaborda

O nome da variável é de menos. O problema real é que codigo i18n não faz parse e replace de virgula por ponto. Esse é o real problema aqui.

J

aqui no sistema tem um monte assim

if( variavel == null ){
    

    //não faz nada

}else{

    ...

}
gomesrod

Uma dessas práticas que vejo com bastante frequência é a repetição de código, também chamada de “Reutilização por Ctrl+C,Ctrl+V”.

Exemplo 1:
Uma aplicação em que trabalhei (na época nem era em Java), tinha esses métodos:

fazAlgumaCoisa(byte[] parametro) fazAlgumaCoisa(String parametro) fazAlgumaCoisaLigeiramenteDiferente(byte[] parametro) fazAlgumaCoisaLigeiramenteDiferente(String parametro)
Cada par fazia a mesma coisa - apenas com outro formato de entrada - e os de baixo também faziam quase igual aos de cima, só uma chamada diferente. A implementação desses métodos estava inteirinha copiada em cada um deles.

Exemplo 2:
Em um sistema web, havia duas páginas do tipo:
exibePedidoPessoaFisica.jsp e exibePedidoPessoaJuridica.jsp
A diferença entre elas estava na área de “Dados do cliente”, que apresentava alguns campos diferenciados.
Acontece que as duas páginas foram inteiramente duplicadas, inclusive seus backing-beans com todo o código.

Os juros do débito técnico continuam sendo pagos até hoje, pois todas as manutenções tem que ser replicadas.

neeryck

ABSURDAMENTE POG!
É POR ISSO QUE SOFREMOS!
ISSO EXPLICA MUITA COISA…

[]'s

V

gomesrod

isso mesmo, um projeto com previsão de chegar a 500 user simultaneos em uma empresa de capital aberto.
O projeto é para ser o sistema de ciclo de vida de produtos da empresa e acreditem

NÃO TEM NENHUMA CLASSE SOMENTE JSP´S…

dwduncan

Sem a devida validação da variável ainda terá usuário digitando 1.000,50 (Nunca dúvide da capacidade dos usuários) a variável dele ainda continuará dandos erros. O mais engraçado é que isso foi feito provavelmente com a idéia de que estaria ganhando tempo. (rapidin… cagadin…)

ViniGodoy

E para todos os GUJnautas novos, recomendo que usem a busca do fórum antes de postar:
http://www.guj.com.br/posts/list/30384.java

E evitem duplicar tópicos.

gomesrod

ViniGodoy:
http://www.guj.com.br/posts/list/30384.java
E evitem duplicar tópicos.

Vini,
Na minha opinião os tópicos são diferentes, aquele mais antigo fala de erros grotescos, as chamadas “pérolas”, é mais pra rir mesmo…
Já esse aqui trata de situações comuns, erros que qualquer um - especialmente os pouco experientes - pode acabar cometendo.

Acabaram surgindo posts do primeiro tipo, mas acho que o objetivo do tópico não era esse.

G

Eu já ví em um sistema Java variáveis com nomes $0, $1, $_ e mais umas coisas malucas. É bem coisa do tipo: complique o código para que nunca outro possa dar manutenção. E mesmo que vocês duvidem o compilador javac aceita esses nomes.

Mas em um grande banco gaúcho ví um método efetuarTransação(), hahahahaha.

juliofsn

Se foi em Perl, é totalmente normal (seriam variáveis especiais da linguagem).

ViniGodoy

gomesrod:
ViniGodoy:
http://www.guj.com.br/posts/list/30384.java
E evitem duplicar tópicos.

Vini,
Na minha opinião os tópicos são diferentes, aquele mais antigo fala de erros grotescos, as chamadas “pérolas”, é mais pra rir mesmo…
Já esse aqui trata de situações comuns, erros que qualquer um - especialmente os pouco experientes - pode acabar cometendo.

Acabaram surgindo posts do primeiro tipo, mas acho que o objetivo do tópico não era esse.

É, tem razão… heheheheh

Na verdade, tem alguns erros bastante cabulosos, e muito comuns, só para citar alguns:

  1. Em Java 2D, usar a classe Graphics recebida por parâmetro diretamente, sem se preocupar com as alterações de estado feitas na própria classe;
  2. Em BDs, fechar a Connection esperando que isso feche os Statements;
  3. Em BDs, não fechar connections e statements em blocos finally;
  4. Em Swing, usar qualquer model iniciado pela palavra “Default”: DefaultTableModel, DefaultComboBoxModel, DefaultListModel, DefaultMultableTreeNode;
  5. Criar arquivos texto usando as classes de OutputStream, ao invés das Writers;
  6. Usar ObjectOutputStream para sockets;
  7. Passar “this” como parâmetro no método de alguma classe, sendo que esse this está no construtor;

public class Xyz { public Xyz() { Abc abc = new Abc(this); //this não foi completamente construído ainda! } }
8. Usar sets ou gets não finais no construtor;
9. Atribuir diretamente objetos a atributos em sets, sem fazer sua cópia (especialmente listas);

Quanto a usar xml através do StringBuilder. Para xmls simples, pode ser uma boa alternativa, caso ele tenha que ser gerado rapidamente. As vezes também é necessário gerar SQL através do PrintWriter diretamente quando o seu conteúdo for enorme. A maior parte das APIs de xml trabalha diretamente em memória, o que pode restringir muito a geração.

dwduncan

Gostaria também de lembrar sobre as classes HIGHLANDER - SÓ PODE HAVER UMA. Aqueles códigos onde existem classes monoliticas onde praticamente tudo teoricamente é feito nelas, view, componentes, acesso ao banco de dados, validação etc…

G

Se foi em Perl, é totalmente normal (seriam variáveis especiais da linguagem).

Não, isso em Java mesmo.

M

Talvez o arquiteto em questão estava familiarizado com alguma linguagem de programação que suporta unicode. Java infelizmente não suporta. :frowning:

Podiam criar um pattern pra isso… :roll:

M

E para todos os GUJnautas novos, recomendo que usem a busca do fórum antes de postar:
http://www.guj.com.br/posts/list/30384.java

E evitem duplicar tópicos.

Por mim pode trancar este tb, outro tópico inútil.

Por falar nisso, o GUJ anda um marasmo ultimamente…

V

mochuara é so para dar risada da burrice de colegas que podem estar do seu lado. Olha essa:

try {

objectMap = (HashMap) objectList.get(i);

// System.out.println(objectList.get(i));

} catch (ClassCastException cce) {

objectMap = (Hashtable) objectList.get(i);

// System.out.println(objectList.get(i));

}

E mais:
function isSomenteNumber(event){

  • uma
if(wbsNumber==null || wbsNumber.equals(null)) {

wbsNumber = 0;

}

Eu tento tento tento… (depois o Java é que é lento…)
try{

try{
    
    try
    {        
        ////---------------

Isso tudo em um unico módulo e me atrevo a diser em no máximo 3 páginas…

Mochuara be happy!
Somente retirei os caçadores de POG (Tykaz, caiomiro…)

ViniGodoy

vm, ao postar códigos, use a tag code:

Seu código

Outra coisa, você ressuscitou esse tópico. Estava morto desde 11/2009.

V

ViniGodoy

Desculpa, prometo nao resucita-lo.

Criado 4 de novembro de 2009
Ultima resposta 30 de jun. de 2010
Respostas 21
Participantes 13