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:
- ¿Qué nombres te encuentras anteponiendo/anexar a clases con regularidad?
- ¿Cuál es el mejor enfoque a la nomenclatura de clases?
- Libro: Design patterns: Elements of Reusable Object-Oriented Software (tapa dura)
- Libro: los Patrones de Arquitectura de Aplicaciones Empresariales (tapa dura)
- Libro: La Aplicación De Los Patrones (Rústica)
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.