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?

mmdemirbas
fonte
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.

Thomas Owens
fonte
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.

pswg
fonte
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