O que o tio Bob quer dizer com 'nomes de frases substantivas'?


14

Estou lendo o Código Limpo do tio Bob. Por não falar inglês nativo, não consegui entender a seguinte declaração:

Classes e objetos devem ter substantivo ou frase substantivo nomes como Customer, WikiPage, Account, e AddressParser. Evitar palavras como Manager, Processor, Data, ou Infoem nome de uma classe. Um nome de classe não deve ser um verbo.

Como eu sei, nenhum dos Manager, Processor, Data, e Infoé um verbo, não é? Qual é o ponto real que ele deseja enfatizar?


talvez o tio Bob esteja adotando o pensamento RESTful em exaltar as virtudes dos recursos como objetos.
— rwong

Respostas:


21

Os três pontos são separados:

  • Os nomes das classes devem ser substantivos ou frases substantivas . Isso significa que o nome da classe deve ser algo que seria o assunto de um verbo. No caso do design orientado a objetos, métodos seriam os verbos que ocorrem na coisa da qual a classe é uma representação.

  • Algumas palavras devem ser evitadas. Managerindica uma possível classe divina . Infoe Datapode indicar um contêiner fictício de dados. Palavras como essa podem indicar modelagem ruim do espaço do problema.

  • Os verbos nunca devem ser nomes de classe. Veja o primeiro ponto - classes modelam coisas, métodos modelam ações.


1
Palavras como essa podem indicar modelagem ruim do espaço do problema. - Bem, alguém poderia pensar que, ou o espaço do problema é modelado de maneira inadequada ou não, independentemente dos nomes escolhidos. Um bom nome não ajuda a um design ruim; e um bom design é apenas marginalmente prejudicado por um nome ruim.
— Ingo

E você poderia dar um passo menor quando se considera como você realmente construir sua classe e como ele interage com o mundo exterior - as propriedades da classe, em geral, ser substantivos, enquanto que os métodos da classe geralmente seria verbos
— Peteh

Se seu projeto tiver uma classe que você considere chamar de "Gerente" ou "Informações" ou "Dados", provavelmente haverá uma dúzia dessas classes, o que significa que você não usaria esses nomes. Você teria um ThisManager e ThatManager e AnotherManger e assim por diante.
— gnasher729

Ele diz que os verbos nunca deveriam estar nos nomes das classes, mas eu estava apenas relendo Adicionando Contexto Significativo, e no exemplo dele na página 29, ele nomeia uma classe GuessStatisticMessage. Agora estou confuso com a regra, porque interpreto o uso de Guess como um verbo, em vez de um substantivo. dictionary.com/browse/guess?s=t
— Devin Gleason Lambert

2
@DevinGleasonLambert Mas não é Guess. É uma mensagem estatística de suposição. Uma mensagem é um substantivo. Adivinha Estatística apenas descreve o tipo de mensagem que é - aquela que envia mensagens sobre estatísticas de adivinhação.
— Thomas Owens

7

Ele está tentando fazer uma distinção entre coisas (substantivos) e ações (verbos). No design convencional orientado a objetos, pensamos nas classes como coisas e em seus métodos como as ações que essas coisas podem executar. Para gerenciar é cuidar de ou coordenar, enquanto gerente é uma pessoa ou coisa que gerencia.

Livros introdutórios geralmente resumem isso aos termos mais simples e óbvios possíveis, como uma classe chamada Dog , com os métodos Bark e Bite . Nas aulas do mundo real, a distinção costuma ser um pouco mais sutil, mas ainda existe. Acredito que o argumento do tio Bob, no entanto, é que, enquanto gerente é um substantivo, mas coloca muita atenção no que o gerente faz, e não no que é - é uma palavra muito vaga para descrever exatamente o que é sendo gerenciado ou como.


5
Infelizmente, esse tipo de pensamento pode levar a projetos errados. Um dos exemplos principais é o exemplo introdutório clássico de uma conta bancária. Em quase todos os livros didáticos de OO, Accounté um objeto, balanceé um campo e transferé um método. Mas o design correto seria: Transferé um objeto, accounté um campo e balanceé um método. É assim que os sistemas bancários são realmente implementados e como os bancos realmente funcionavam antes dos computadores.
— Jörg W Mittag

@ JörgWMittag: vale a pena postar essa história de advertência como resposta; que estas são diretrizes gerais e, em certos casos raros, podem levar a uma decomposição ruim.
— smci 11/03/19
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.