Nombrar clases se vuelve debilitante [cerrado]

9

No estoy seguro de si esto es un rasgo de TOC o no, pero encuentro que a veces me bloqueo por completo y no puedo continuar lo que estoy haciendo al nombrar una clase (o función, o espacio de nombres, etc.) que creo que debe usarse fuera de un proyecto dado. Una API por ejemplo. O una biblioteca de clase de utilidad.

Si el nombre no es exactamente correcto (en mi opinión) simplemente no puedo continuar ... me quedo atascado tratando de encontrar el nombre correcto. He intentado escribir pequeñas aplicaciones que lo usarían para ver cómo se ven los nombres, pero eso no parece ayudar ...

Sé que no debería importar, y está en contra de cualquier mentalidad de programación asumir que lo conseguirías perfecto al principio ... Simplemente me siento impotente ...

Cualquier sugerencia / idea sería muy apreciada ...

davidsleeps
fuente
3
Según mi experiencia, una vez que haya finalizado el cuerpo de la clase, refactorizado, etc., el nombre de la clase y los métodos comienzan a ocupar su lugar.
Trabajo
11
Cita obligatoria: "Solo hay dos problemas difíciles en Ciencias de la Computación: invalidación de caché y nombrar cosas". - Phil Karlton
Macke
Sensación familiar. Simplemente no te rindas, no comiences a nombrar cosas "comunes", "utilidades", "gerentes" y "ayudantes". :)
Arnis Lapsa

Respuestas:

10

En mi opinión, el problema que tiene no es solo encontrar una mejor manera de encontrar buenos nombres, sino lidiar con la compulsión de hacerlo. Si soy honesto, reconozco un rasgo similar en mí mismo. Los nombres son importantes, después de todo, y me gusta un buen nombre para los conceptos en los que estoy trabajando. Sin embargo, no siempre son lo más importante.

Estos son algunos de los métodos que uso para superar este tipo de cosas:

  1. Reconozca que no existe una solución perfecta, solo soluciones mejores que otras.
  2. Poner primero lo primero. Es más importante completar una tarea de programación que hacerlo perfectamente.
  3. Pregunta a otras personas. Todos tenemos nuestras áreas donde nos atascamos, pero afortunadamente diferentes personas se atascan en diferentes lugares. Quizás alguien más se le ocurra un buen nombre, o le diga que realmente no importa.
  4. Establece un límite de tiempo. Dése x minutos para hacer lo que le cuelga y luego siga adelante.
  5. Prométete que volverás más tarde. Mantenga un registro de las cosas a las que desea volver. Muchos de estos tipos de problemas se vuelven más claros cuando los dejas solos por un momento. O se te ocurrirá un nombre mejor más tarde, o reconocerás que realmente no importa.
  6. Reconozca que en 100 años, a nadie le importará de todos modos.
  7. Haz lo contrario. Déle a una clase un nombre realmente malo y vea qué sucede. Esto confirmará la necesidad de dedicar tiempo a mejores nombres o le mostrará lo poco que realmente importa. Además, esto te ayudará a salir de la mentalidad obsesiva.
  8. Orar. Esto a menudo funciona para mí.
  9. Valórate aparte de lo que haces. Romper con la idea de que su propio valor proviene de ofrecer la perfección. Cuando reconocemos que tenemos un valor intrínseco, aparte de nuestros trabajos, sentimos menos vergüenza cuando no estamos a la altura de nuestros propios estándares.
  10. Invente nuevas palabras y úselas para nombrar sus clases, o simplemente reutilice las viejas. La programación es un proceso creativo y, a veces, las ideas que capturamos son ideas nuevas. Las nuevas ideas necesitan nuevos nombres. "EmployeeTransmogrifier" es un nombre perfectamente válido para una clase.
  11. Considera que estás tratando de resolver el problema incorrecto. Por ejemplo, no es una buena idea escribir una API sin tener una idea muy clara de cuáles son las necesidades de la persona que llama. Si resuelve este problema, su problema de nombres podría ser mucho más fácil.
  12. Almorzar. El almuerzo siempre es bueno.
Kramii
fuente
44
+1 para el almuerzo. Mucha gente no le da suficiente valor a pensar en otra cosa para resolver un problema.
Unholysampler
Algunos puntos geniales y bien pensados ​​...
davidsleeps
5

primeramente

Hágase la pregunta "¿cuál es el único propósito de esta clase?". Sin adherirse al Principio de Responsabilidad Única, nombrar clases y métodos se vuelve muy difícil. Si no puede responder esa pregunta, es posible que deba repensar lo que desea que haga la clase y considerar separar las preocupaciones. Esto hará que sea más fácil nombrar

En segundo lugar

¿Tienes un patrón para nombrar tus clases? Quizás intente mirar algunos patrones de nombres comunes, por ejemplo, el patrón, que se vuelve mucho más fácil de seguir una vez que haya abordado SRP anteriormente. ¿Su clase analiza XML? Prueba XMLParser. ¿Analiza XML, crea modelos de dominio para representar la entrada, los persiste en la base de datos y luego publica un mensaje de éxito en Twitter? Intenta refactorizar.

En tercer lugar

Entiendo de dónde vienes, y he estado en una situación similar antes. Quizás intente desarrollar su clase con alguna funcionalidad, con un nombre temporal para comenzar. Con cualquier buen IDE o asistente de refactorización, cambiar el nombre de la clase debería ser una acción de un solo clic, ¡así que lo que denomines tu clase inicialmente no necesita ser permanente! Esto lo ayudará a superar su bloqueo de TOC y le dará tiempo a su subconsciente para procesarlo un poco más.


Finalmente y ligeramente fuera de tema

Tuve un momento de bombilla en un trabajo que estaba haciendo el otro día, implementando un sistema no crítico, y pasé un tiempo justo jugando con diferentes nombres de clases, etc. clases de acuerdo con su implementación específica ... Por ejemplo, puede tener la tentación de tener IXMLParser y XMLParser, pero ¿qué sucede cuando su entrada cambia a JSON? Pruebe IInputParser en su lugar, de esa manera puede crear clases concretas XMLParser y JSONParser que implementan IInputParser de diferentes maneras.

mjhilton
fuente
Sí, también he tenido este tipo de momento ... el problema es que eres muy bueno en eso y nunca puedes simplemente escribir el código deseado, tres siempre es un diseño de abstracción ...
Robin Vessey
1

Para mí, generalmente es una señal de que el diseño no está claro en mi mente, así que invento un nombre y me doy un tiempo (digamos 2 minutos) para encontrar uno mejor, al final de ese tiempo, tengo que use el que se me ocurrió primero. Para empezar, Barney, Wilma y Fred son los favoritos. Hago cosas como "BarniesInputParser". Los nombres son tan malos que tengo que encontrar uno mejor o cambiarlo más tarde. También son tan malos que son únicos, lo que hace que la refactorización sea trivial y segura, y cualquiera que vea el código incompleto puede ver instantáneamente que está incompleto.

Lo importante es que si bien no está agregando funcionalidad, no le está dando a su cerebro ninguna información nueva para usar para definir el nombre (y aclarar el diseño). Todo lo que está haciendo es regurgitar la misma entrada de diferentes maneras.

O ve a hacer un café. Antes de llegar a la máquina, la tendrá ...

Mattnz
fuente
espantosamente, sé del software enviado que fue nombrado de esa manera ... imagínese tratando de explicarlo 5 años después, cuando usted es el único en la compañía que aún sabe quién es "Tim".
Yaur
0

Recibí esto de un amigo hace un tiempo. Escribe lo que se supone que debe hacer tu proceso. Solo una breve narrativa. Luego tome los sustantivos y conviértalos en clases, los verbos en métodos y los adverbios en propiedades.

evitar el trabajo
fuente
Es un ejercicio simple de tipo CS101 para enseñar OOAD . Sin embargo, se queda corto en cualquier sistema real que no sea ideado por un profesor o autor de un libro de texto.