Estoy leyendo Clean Code por el tío Bob. Como no hablo inglés nativo, no pude entender la siguiente declaración:
Las clases y los objetos deben tener sustantivo o un sintagma nominal nombres como
Customer
,WikiPage
,Account
, yAddressParser
. Evita palabras comoManager
,Processor
,Data
, oInfo
en nombre de una clase. Un nombre de clase no debe ser un verbo.
Que yo sepa, ninguno de los Manager
, Processor
, Data
, y Info
es un verbo, no es así? ¿Cuál es el punto real que quiere enfatizar?
coding-style
terminology
code-quality
naming
mmdemirbas
fuente
fuente
Respuestas:
Los tres puntos están separados:
Los nombres de clase deben ser sustantivos o frases nominales . Esto significa que el nombre de la clase debería ser algo que sería el sujeto de un verbo. En el caso del diseño orientado a objetos, los métodos serían los verbos que tienen lugar sobre lo que representa la clase.
Algunas palabras deben ser evitadas.
Manager
indica una posible clase de dios .Info
yData
puede indicar un contenedor de datos ficticios. Palabras como esta pueden indicar un modelado deficiente del espacio del problema.Los verbos nunca deben ser nombres de clase. Vea el primer punto: las clases modelan cosas, los métodos modelan acciones.
fuente
Él está tratando de establecer una distinción entre cosas (sustantivos) y acciones (verbos). En el diseño convencional orientado a objetos, pensamos en las clases como cosas, y sus métodos como las acciones que esas cosas pueden realizar. Para gestionar es cuidar o coordinar, mientras gerente es una persona o cosa que administra.
Los libros introductorios generalmente reducen esto a los términos más simples y obvios posibles, como una clase llamada Perro , con métodos Bark and Bite . En las clases del mundo real, la distinción es a menudo un poco más sutil, pero sigue ahí. Sin embargo, creo que el punto que el tío Bob está haciendo es que, si bien el gerente es un sustantivo, pone mucha atención en lo que hace el gerente y no en lo que es, es una palabra demasiado vaga para describir exactamente lo que es ser manejado o cómo.
fuente
Account
es un objeto,balance
es un campo ytransfer
es un método. Pero el diseño correcto sería:Transfer
es un objeto,account
es un campo ybalance
es un método. Así es como los sistemas bancarios son realmente implementadas y cómo bancario asuma realmente trabajaron antes de los ordenadores.