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
, eAddressParser
. Evitar palavras comoManager
,Processor
,Data
, ouInfo
em 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?
coding-style
terminology
code-quality
naming
mmdemirbas
fonte
fonte
Respostas:
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.
Manager
indica uma possível classe divina .Info
eData
pode 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.
fonte
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.
fonte
Account
é um objeto,balance
é um campo etransfer
é um método. Mas o design correto seria:Transfer
é um objeto,account
é um campo ebalance
é um método. É assim que os sistemas bancários são realmente implementados e como os bancos realmente funcionavam antes dos computadores.