Que antipadrões de nomeação existem? [fechadas]

35

Existem alguns nomes, nos quais, se você está procurando esses nomes, sabe que já estragou alguma coisa.

Por exemplo:

XxxManager
Isso é ruim porque uma classe deve descrever o que a classe faz. Se a palavra mais específica que você pode sugerir para o que a turma faz é "gerenciar", a turma é muito grande.

Quais outros antipadrões de nomeação existem?

Para esclarecer, não estou perguntando "que nomes são ruins" - essa pergunta é totalmente subjetiva e não há como responder. Estou perguntando: "quais nomes indicam problemas gerais de projeto com o sistema". Ou seja, se você está querendo chamar um componente Xyz, isso provavelmente indica que o componente está malconcebido. Observe também que há exceções para todas as regras - estou apenas procurando sinalizadores de aviso para quando realmente preciso parar e repensar um design.

    
por Billy ONeal 31.10.2016 / 18:31
fonte

10 respostas

22

Os seguintes anti-padrões de nomenclatura estão relacionados ao .NET e, especialmente, C #:

  • Inconsistências . Se você decidiu iniciar cada nome de campo com um sublinhado à esquerda, atenha-se a ele .
  • Abreviações ambiguos com vogais ausentes . Eu tenho visto seriamente nomes de campo como cxtCtrlMngr . Você dificilmente pode adivinhar o que isso significa.
  • Nomes de variáveis muito longos e detalhados . ILoginAttemptRepository é bom e descritivo - ILoginAttemptRepositoryUsingEntityFrameworkForObjectRelationalMapping é descritivo, mas definitivamente não é bom.
por 06.06.2011 / 20:58
fonte
9

Um que eu me deparo com frequência é, simplesmente, não usar nenhum padrão de nomenclatura. Tipicamente indicativo de ignorância do desenvolvedor (que os padrões de nomenclatura são uma coisa boa) e também este anti-padrão tende a violar grosseiramente o SRP colocando todos os tipos de métodos que são meio que relacionados a uma classe nessa classe. por exemplo, uma classe Customer tem propriedades, métodos CRUD, qualquer coisa remotamente relacionada a um Cliente que alguma parte do aplicativo precise.

Também adicionarei que usar "Engine" como sufixo é o mesmo que usar "Manager". É muito vago e uma classe chamada XxxEngine tende a ser o que equivale a um módulo estilo VB contendo um monte de métodos, de modo que está em um local "fácil de usar", sem nenhum conhecimento ou idéia de programação orientada a objetos. p>     

por 06.06.2011 / 20:15
fonte
7

Bem, respostas simples primeiro: digite húngaro ( link , também tem ótimas outras ideias. Uma visão mais equilibrada sobre quando húngaro não é mal,   link )

    
por 06.06.2011 / 20:14
fonte
6

Prefixo um 'I' ao nome de uma interface ou 'Resumo' ao nome de uma classe abstrata. Isso pode ser desculpável em linguagens que não têm o conceito de classes abstratas, ou que não diferenciam entre interfaces e classes abstratas - mas em Java, por exemplo, é sempre uma má ideia. / p>

Além disso, eu não concordo com você sobre a coisa do gerente. Eu uso esse padrão às vezes, e isso significa que, se eu tentasse nomear outra coisa, o nome não seria mais descritivo do que o XxxxxManager. Existem algumas tarefas (não necessariamente complexas) que simplesmente não podem ser resumidas em uma ou duas palavras.

    
por 06.06.2011 / 20:36
fonte
6

Speeling:

Eu tenho uma deficiência inclinada e não consigo soletrar. Sem o corretor ortográfico, sou impotente. Tento copiar todos os nomes que crio para um processador de texto para verificação, mas sempre sinto falta de alguns. No meu último projeto, escrevi uma grande parte da API e acho que não fiz a verificação ortográfica na primeira vez que usei a palavra responce e presumi que estava certo, porque ninguém me disse. Tivemos pelo menos 50 funções com responce nela. Uma nova pessoa entrou na equipe e perguntou por que usamos resposta eu me senti muito burro.

    
por 07.06.2011 / 02:12
fonte
5

Bem, eu tenho medo que minhas opiniões sejam um pouco controversas. Mas vamos tentar ...

Tanto quanto eu estou preocupado, eu tenho que concordar com Mike Baranczak, nomes como XxxController, XxxHandler é algo que realmente usamos. Para nós, um Controlador é algo como um ponto de entrada para algo "encapsulado", e. Gerenciando transações, lidando com erros inesperados, chamando XxxHandler para fazer o trabalho real. Eu diria que um XxxManager é sinônimo de controlador. Eu acho que é importante não usar o Manager em um caso e o Controller em outro. Ser consistente é muito importante se você trabalha em equipe.

Seria muito difícil ou talvez nem mesmo seja possível encontrar nomes melhores para esse tipo de coisa. Xxx deve ser bem escolhido para tornar a situação mais clara.

O que eu pessoalmente não gosto é, quando um método chamado get ... ou set ... é mais do que apenas um simples acessador. Eu gosto de det ... para determinar.

Uma outra coisa, que me vem à mente: Segundo o tio Bob. Um "E" em um nome de método é um sinal de fazer muito. Mas a vida nem sempre é apenas em preto e branco - há situações em que acho que está tudo bem - por exemplo. devido a problemas de desempenho (quando você já tem os dados devido a verificar por que não processá-los) ...

Pessoalmente sou também um grande fã da notação húngara de sistemas - na maioria das vezes você está lidando com código fonte em um IDE ok. Mas muitas vezes você está usando apenas um editor ou está navegando no repositório em um navegador. Uma desvantagem pode ser o suporte a ferramentas devido a prefixos de tipo ...

Eu acho que a coisa mais importante é ser consitente - uma convenção abaixo do ideal - para mim - é melhor do que não ter nenhuma convenção ...

    
por 06.06.2011 / 23:16
fonte
5

Talvez o pior anti-padrão de nomeação seja este:

create table stuff(..., foo1 string, bar1 string,
                        foo2 string, bar2 string, 
                        foo3 string, bar3 string, ...)

Temos uma lista de três elementos de pares [foo, bar]. Se precisarmos de um quarto, teremos que adicionar novas colunas à tabela.

Liderando para codificar assim:

'SELECT foo' + i + ', bar' + i + ' FROM stuff'

Uma tabela separada deve ser criada com colunas foo e bar e vinculada à tabela de itens:

create table fubar(foo string, bar string, stuff_id long)

O segundo pior é este:

class Student {
  ...
  String homeStreet;
  String homeCity;
  String homeState;
  String permStreet;
  String permCity;    
  String permState;
  ...
}

Aqui temos seis campos em vez de duas instâncias de uma classe Address.

Esse antipadrão é marcado por uma série de nomes de duas partes que listam cada combinação de dois conjuntos, por exemplo, [foo, bar] x [1,2,3] ou [casa, perm] x [rua, cidade, estado]

    
por 07.06.2011 / 14:56
fonte
3

Qualquer nomeação de classe ou interface que seja uma tautologia é ruim, não apenas em Java que o link fala, mas em qualquer linguagem.

Tautology (rhetoric), using different words to say the same thing even if the repetition does not provide clarity.

    
por 07.06.2011 / 22:30
fonte
3

Freqüentemente encontro bibliotecas de software com nomes genéricos, como Library ou Common . Eles indicam um design abaixo do ideal: os desenvolvedores fazem um esforço para evitar a duplicação de código, mas sem qualquer tentativa de criar um design decomposto com base na funcionalidade.

    
por 14.09.2011 / 09:44
fonte
1

De Microsoft na nomenclatura, posso fornecer esta lista de nomes inválidos:

  1. Eles não são semânticos, o que significa que eles têm nomes que, em vez de enfatizar o que ele faz, enfatizam a tecnologia que ele usa ou o padrão com base em .
  2. Eles não seguem uma consistência sintática. Por exemplo, parte dos nomes são em camelos, enquanto outra parte é em maiúsculas.
  3. São abreviações, que são difíceis de entender, como ScrollableX em vez de CanScrollHorizontally
  4. Eles são escolhidos de forma que mexem com as palavras-chave desse ambiente.
por 14.09.2011 / 14:57
fonte