Es muy difícil encontrar nombres buenos y precisos para las clases. Si se hace correctamente, hace que el código sea más autodocumentado y proporciona un vocabulario para razonar sobre el código a un nivel más alto de abstracción.
Las clases que implementan un patrón de diseño en particular pueden recibir un nombre basado en el nombre del patrón bien conocido (por ejemplo, FooFactory, FooFacade), y las clases que modelan directamente conceptos de dominio pueden tomar sus nombres del dominio del problema, pero ¿qué pasa con otras clases? ¿Hay algo parecido a un tesauro de programador al que pueda recurrir cuando me falta inspiración y quiero evitar el uso de nombres de clases genéricos (como FooHandler, FooProcessor, FooUtils y FooManager)?
Respuestas:
Citaré algunos pasajes de Implementation Patterns de Kent Beck:
Nombre de superclase simple
Nombre de subclase calificado
Interfaz
¡Para una discusión más detallada, compre el libro! ¡Vale la pena! :)
fuente
Opte siempre por MyClassA, MyClassB: permite una buena ordenación alfa ...
¡Estoy bromenando!
Esta es una buena pregunta y algo que experimenté no hace mucho tiempo. Estaba reorganizando mi base de código en el trabajo y tenía problemas de dónde poner qué y cómo llamarlo ...
los verdadero problema?
Tenía clases haciendo demasiado. Si intenta adherirse al principio de responsabilidad única , todo se combinará mucho mejor. En lugar de una clase PrintHandler monolítica , puede dividirla en PageHandler , PageFormatter (y así sucesivamente) y luego tener una clase de impresora maestra que lo trae todo junto.
En mi reorganización, me tomó tiempo, pero terminé agrupando una gran cantidad de código duplicado, obtuve mi base de código mucho más lógica y aprendí muchísimo cuando se trata de pensar antes de lanzar un método adicional en una clase: D
Sin embargo, no recomendaría poner cosas como nombres de patrones en el nombre de la clase. La interfaz de clases debería hacer eso obvio (como ocultar el constructor de un singleton). No hay nada de malo con el nombre genérico, si la clase tiene un propósito genérico.
¡Buena suerte!
fuente
La excelente charla de Josh Bloch sobre un buen diseño de API tiene algunos buenos consejos:
Si su problema es cómo nombrar las clases internas expuestas, tal vez debería consolidarlas en una clase más grande.
Si su problema es nombrar una clase que está haciendo muchas cosas diferentes, debería considerar dividirla en varias clases.
Si ese es un buen consejo para una API pública, entonces no puede hacer daño a ninguna otra clase.
fuente
Si le pegan con un nombre, a veces sólo lo que le da ningún nombre medio sensible con el compromiso de revisar más tarde es una buena estrategia.
No consigas nombrar parálisis. Sí, los nombres son muy importantes, pero no lo suficiente como para perder una gran cantidad de tiempo. Si no puede pensar en un buen nombre en 10 minutos, siga adelante.
fuente
Si no me viene a la mente un buen nombre, probablemente me preguntaría si hay un problema más profundo: ¿la clase cumple un buen propósito? Si es así, nombrarlo debería ser bastante sencillo.
fuente
Si su "FooProcessor" realmente procesa foos, entonces no sea reacio a darle ese nombre solo porque ya tiene un BarProcessor, BazProcessor, etc. En caso de duda, lo obvio es lo mejor. Es posible que los otros desarrolladores que tienen que leer su código no estén usando el mismo tesauro que usted.
Dicho esto, más especificidad no estaría de más para este ejemplo en particular. "Proceso" es una palabra bastante amplia. ¿Es realmente un "FooUpdateProcessor" (que podría convertirse en "FooUpdater"), por ejemplo? No tiene que ser demasiado "creativo" con el nombre, pero si escribió el código, probablemente tenga una idea bastante clara de lo que hace y lo que no hace.
Finalmente, recuerde que el nombre de la clase no es todo lo que usted y los lectores de su código tienen que seguir; por lo general, también hay espacios de nombres en juego. A menudo, estos pueden dar a los lectores el contexto suficiente para ver claramente para qué es realmente su clase, incluso si su nombre es bastante genérico.
fuente