¿Qué quiere decir tío Bob con 'nombres de frases nominales'?

14

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, y AddressParser. Evita palabras como Manager, Processor, Data, o Infoen nombre de una clase. Un nombre de clase no debe ser un verbo.

Que yo sepa, ninguno de los Manager, Processor, Data, y Infoes un verbo, no es así? ¿Cuál es el punto real que quiere enfatizar?

mmdemirbas
fuente
tal vez el tío Bob está adoptando el pensamiento RESTful al exaltar las virtudes de los recursos como objetos.
rwong

Respuestas:

21

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. Managerindica una posible clase de dios . Infoy Datapuede 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.

Thomas Owens
fuente
1
Palabras como esta pueden indicar un modelado deficiente del espacio del problema. - Bueno, uno pensaría, o el espacio del problema está mal modelado o no, independientemente de los nombres elegidos. Un buen nombre no ayuda a un diseño pobre; y un buen diseño solo se ve afectado marginalmente por un mal nombre.
Ingo
Y podría tomar esto un paso más abajo al considerar cómo realmente construye su clase y cómo interactúa con el mundo exterior: las propiedades de la clase generalmente serían sustantivos, mientras que los métodos de la clase generalmente serían verbos
PeteH
Si su proyecto tiene una clase que consideraría llamar "Administrador" o "Información" o "Datos", entonces es probable que tenga una docena de esas clases, lo que significa que no usaría estos nombres. Tendría un ThisManager y ThatManager y AnotherManger, etc.
gnasher729
Él dice que los verbos nunca deberían estar en los nombres de las clases, pero solo estaba releyendo Agregar contexto significativo, y en su ejemplo en la página 29, nombra una clase GuessStatisticMessage. Ahora estoy confundido sobre la regla, porque interpreto su uso de Guess como un verbo, en lugar de un sustantivo. dictionary.com/browse/guess?s=t
Devin Gleason Lambert
2
@DevinGleasonLambert Pero no es Guess. Es un mensaje estadístico Guess. Un mensaje es un sustantivo. Guess Statistic solo describe el tipo de mensaje que es, uno que envía mensajes sobre estadísticas de conjetura.
Thomas Owens
7

É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.

pswg
fuente
55
Desafortunadamente, este tipo de pensamiento puede conducir a diseños incorrectos. Uno de los mejores ejemplos es el clásico ejemplo introductorio de una cuenta bancaria. En casi todos los libros de texto OO, Accountes un objeto, balancees un campo y transferes un método. Pero el diseño correcto sería: Transferes un objeto, accountes un campo y balancees un método. Así es como los sistemas bancarios son realmente implementadas y cómo bancario asuma realmente trabajaron antes de los ordenadores.
Jörg W Mittag
@ JörgWMittag: vale la pena publicar esa historia de advertencia como respuesta; que estas son pautas generales y que en ciertos casos raros pueden conducir a una descomposición incorrecta.
smci