1147 votos

Nombrar las clases - ¿Cómo evitar llamar a todo lo que un "<WhatEver> Manager"?

Hace mucho tiempo leí un artículo (creo que una entrada de blog) que me ponga el "derecho" a la pista de nomenclatura de objetos: Ser muy escrupulosos acerca de los nombres de las cosas en su programa.

Por ejemplo, si mi solicitud fue (como un típico negocio de la aplicación) el manejo de los usuarios, las empresas y las direcciones que me gustaría tener un User, Company y Address de dominio de la clase - y probablemente en algún lugar de un UserManager, CompanyManager y AddressManager pop up que se encarga de esas cosas.

Así que puedes decir lo que esos UserManager, CompanyManager y AddressManager ¿? No, porque el Administrador es un término genérico que se adapta a cualquier cosa que usted puede hacer con su dominio de los objetos.

El artículo que leí recomienda el uso de nombres específicos. Si se trataba de una aplicación de C++ y el UserManager's de trabajo fue asignar y liberar a los usuarios de la pila no llegaría a los usuarios, sino de la guardia de su nacimiento y de la muerte. Hmm, tal vez podríamos llamar a esto una UserShepherd.

O tal vez la UserManager's trabajo es examinar cada Usuario de datos del objeto y el signo de los datos mediante criptografía. Entonces tendríamos una UserRecordsClerk.

Ahora que esta idea se me quedó trato de aplicarlo. Y encontrar esta simple idea increíblemente duro.

Puedo describir lo que las clases y (mientras yo no caer en quick & dirty codificación) las clases escribo hacer exactamente una cosa. Lo que echo de menos ir de la descripción de los nombres es una especie de catálogo de los nombres, de un vocabulario que los mapas de los conceptos a los nombres.

Finalmente me gustaría tener algo así como un patrón de catálogo en mi mente (con frecuencia el diseño de los patrones de proporcionar fácilmente los nombres de objeto, por ejemplo. una fábrica)

  • Fábrica Crea otros objetos (nombre tomado de un patrón de diseño)
  • Pastor - pastor maneja la vida de los objetos, su creación y cierre
  • Sincronizador - Copia de datos entre dos o más objetos (o jerarquías de objetos)
  • Niñera - Ayuda a los objetos de llegar a "utilizable" estado después de la creación - por ejemplo, el cableado de los otros objetos

  • etc, etc.

Así que, ¿cómo se maneja ese tema? ¿Tienes un fijo de vocabulario, hacer que inventar nuevos nombres sobre la marcha, o hacer que usted considere la posibilidad de dar nombre a las cosas no tan importantes o mal?

PD: yo también estoy interesado en enlaces a artículos y blogs de discutir el asunto. Como empezar, aquí está el artículo original que me puso a pensar acerca de ello: Nomenclatura de las Clases de Java sin un 'Manager'


Actualización: Resumen de respuestas

He aquí un pequeño resumen de lo que he aprendido de esta pregunta en el ínterin.

  • Trate de no crear nuevas metáforas (la Niñera)
  • Eche un vistazo a lo que otros marcos

Más artículos y libros sobre este tema:

Y una lista actual de los nombre de los prefijos/sufijos he recogido (subjetivamente!) a partir de las respuestas:

  • Coordinador
  • Generador de
  • Escritor
  • Lector
  • Controlador de
  • Contenedor
  • Protocolo
  • Objetivo
  • Convertidor
  • Controlador de
  • Ver
  • Fábrica
  • Entidad
  • Cubo

Y un buen consejo para el camino:

No consigue nomenclatura de la parálisis. Sí, los nombres son muy importantes pero no son lo suficientemente importantes como para desperdiciar enormes cantidades de tiempo. Si usted no puede pensar en un buen nombre en 10 minutos, pase.

194voto

Chris S Puntos 32376

Me hicieron una pregunta similar, pero en donde sea posible trataré de copiar los nombres que ya están en la .NET marco, buscar ideas en Java y Android marcos.

Parece Helper, Manager, Util es la inevitable sustantivo adjuntar para la coordinación de las clases que contienen ningún estado y que en general son de procedimiento y estática. Una alternativa es Coordinator.

Usted podría conseguir en particular púrpura prosey con los nombres e ir a por cosas como Minder, Overseer,Supervisor,Administrator,Master pero como he dicho prefiero mantenerlo como el marco nombres estás uso.

Algunos otros sufijos comunes (si es el término correcto) también se encuentra en el .NET marco

  • Builder
  • Writer
  • Reader
  • Handler
  • Container

112voto

Markus Meyer Puntos 124

Puedes echar un vistazo en source-code-wordle.dehe analizado no la que más frecuentemente se utilizan los sufijos de los nombres de clase de la .NET marco y algunas otras bibliotecas.

El top 20 son:

  • atributo
  • tipo
  • ayudante
  • colección
  • convertidor
  • controlador de
  • info
  • proveedor de
  • excepción
  • servicio
  • elemento
  • administrador
  • nodo
  • opción
  • fábrica
  • contexto
  • elemento
  • diseñador
  • base
  • editor

63voto

CesarGon Puntos 8710

Yo soy todo para el bien de los nombres, y a menudo escribo sobre la importancia de tener gran cuidado al elegir los nombres de las cosas. Por esta misma razón, tengo dudas de metáforas al nombrar las cosas. En la pregunta original "de fábrica" y "sincronizador" parecen buenos nombres para lo que parecen decir. Sin embargo, "pastor" y "la niñera" no, porque se basan en metáforas. Una clase en su código no puede ser , literalmente, una niñera; llamar a una niñera, ya que se ve después de algunas otras cosas muy parecido a la vida real-la niñera que cuida a los bebés o a los niños. Que bien que en el lenguaje informal, pero no muy bien (en mi opinión) la nomenclatura de las clases en el código que tendrá que ser mantenidos por que sabe que quién sabe cuando.

¿Por qué? Porque las metáforas son dependientes de cultivo y a menudo individuo dependiente así. Para que nombrar una clase de "niñera" puede ser muy clara, pero tal vez no es claro para alguien más. No debemos confiar en que, a menos que esté escribiendo código que es solo para uso personal.

En cualquier caso, de la convención puede hacer o romper una metáfora. El uso de "fábrica" en sí se basa en una metáfora, sino uno que ha sido de alrededor durante bastante tiempo y es en la actualidad bastante conocida en el mundo de la programación, así que yo diría que es seguro de usar. Sin embargo, "la niñera" y "pastor" son inaceptables.

38voto

John Puntos 11550

Suena como una pendiente resbaladiza a algo que sería publicado en thedailywtf.com... "ManagerOfPeopleWhoHaveMortgages", etc

Supongo que es justo que uno monolítica clase Manager no es un buen diseño, pero usando el 'Manager' no es malo. En lugar de UserManager que podría romper hacia abajo para UserAccountManager, UserProfileManager, UserSecurityManager, etc. 'Director' es una buena palabra, ya que muestra claramente una clase no es la representación de un mundo real 'cosa'. 'AccountsClerk' - ¿cómo se supone que voy a saber si eso es una clase que gestiona los datos de usuario, o representa a alguien que es funcionario de Cuentas para su trabajo?

10voto

Brian Agnew Puntos 143181

Estar al tanto de los patrones definidos por (digamos) el libro GOF , y nombrar a los objetos después de que éstos me consigue un largo camino en el nombramiento de las clases, la organización de ellos y comunicar la intención. La mayoría de la gente va a entender esta nomenclatura (o al menos una parte importante de ella).

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X