Piores práticas em um unico sistema

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ó…

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/

hahahaa acento na variavel, essa foi boa

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)…

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.

aqui no sistema tem um monte assim

[code]
if( variavel == null ){

//não faz nada

}else{

...

}[/code]

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.

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

[]'s

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…

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…)

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.

[quote=ViniGodoy]http://www.guj.com.br/posts/list/30384.java
E evitem duplicar tópicos. [/quote]
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.

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.

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

[quote=gomesrod][quote=ViniGodoy]http://www.guj.com.br/posts/list/30384.java
E evitem duplicar tópicos. [/quote]
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.[/quote]

É, 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.

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…

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

Não, isso em Java mesmo.

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:

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. [/quote]

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

Por falar nisso, o GUJ anda um marasmo ultimamente…

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…)