Hay algunos nombres, donde si te encuentras buscando esos nombres, sabes que ya has desordenado algo.
Por ejemplo:
XxxManager
Esto es malo porque una clase debe describir lo que hace la clase. Si la palabra más específica que se te ocurre para lo que hace la clase es "administrar", entonces la clase es demasiado grande.
¿Qué otros antipatrones de nombres existen?
Para aclarar, no estoy preguntando "qué nombres son malos", esa pregunta es completamente subjetiva y no hay forma de responderla. Me pregunto, "qué nombres indican problemas generales de diseño con el sistema". Es decir, si desea llamar a un componente Xyz, eso probablemente indica que el componente está mal concebido. También tenga en cuenta aquí que hay excepciones a cada regla: solo estoy buscando indicadores de advertencia para cuando realmente necesito detener y repensar un diseño.
fuente
Respuestas:
Los siguientes antipatrones de nombres están relacionados con .NET y, especialmente, C #:
cxtCtrlMngr
. Difícilmente puedes adivinar qué se supone que significa eso.ILoginAttemptRepository
está bien yILoginAttemptRepositoryUsingEntityFrameworkForObjectRelationalMapping
es descriptivo, es descriptivo, pero definitivamente no está bien.fuente
I
supone que significainterface
aquíimplementer
o la primera persona del singular? Dado que la mayoría de las clases implementan una interfaz, tener demasiadas clases / interacciones con una letra mayúsculaI
es molesto y dificulta la legibilidad, y un olor a código por sí mismo.Uno con el que me encuentro a menudo es, simplemente, no usar ningún patrón de nomenclatura. Típicamente indicativo de ignorancia del desarrollador (que los patrones de nomenclatura son algo bueno ) y también este antipatrón tiende a violar gravemente SRP al introducir todo tipo de métodos que están relacionados con una clase en esa clase, por ejemplo, un Cliente La clase tiene propiedades, métodos CRUD, cualquier cosa remotamente relacionada con un Cliente que alguna parte de la aplicación necesita.
También agregaré que usar "Engine" como sufijo es casi lo mismo que usar "Manager". Es muy vago y una clase llamada
XxxEngine
tiende a ser lo que equivale a un Módulo de estilo VB que contiene un montón de métodos, por lo que está en un lugar "fácil de usar", sin ningún conocimiento o idea de programación orientada a objetos.fuente
Bueno, primero las respuestas simples: escriba húngaro ( http://mindprod.com/jgloss/unmainnaming.html , también tiene algunas otras ideas geniales. Una visión más equilibrada sobre cuándo húngaro no es malo, http://www.joelonsoftware.com /articles/Wrong.html )
fuente
Prefijar una 'I' al nombre de una interfaz, o 'Resumen' al nombre de una clase abstracta. Esto puede ser excusable en lenguajes que no tienen el concepto de clases abstractas, o que no diferencian entre interfaces y clases abstractas, pero en Java, por ejemplo, siempre es una mala idea.
Además, no estoy de acuerdo contigo en lo del Administrador. A veces uso ese patrón, y solo significa que si intentara nombrarlo de otra manera, entonces el nombre no sería más descriptivo que XxxxxManager. Hay algunas tareas (no necesariamente complejas) que simplemente no se pueden resumir claramente en una o dos palabras.
fuente
XxxxManager
es el peor nombre posible que puede tener una clase. ¡Por supuesto que logra algo! Esa es la razón por la que fue escrito.Manager
es una palabra de relleno sin sentido que no agrega valor a la comprensión, por su nombre, de lo que es responsable una clase.TabManager
? ¿Tienes un mejor nombre para una clase que controla un mecanismo de pestaña JSP? O jadeoTabController
... En cuanto al prefijoAbstract
, siento que se usa en exceso, pero a menudo es válido (consulte las bibliotecas de Java para ver ejemplos). Creo que puedo decir con seguridad que nunca he vistoI
interfaces en ningún lugar donde alguien no intentara programar en una interfaz que no debería haber estado allí. Al igual, solo una clase implementa la interfaz.IXxx
o noXxxImpl
.Speeling:
Tengo una discapacidad de inclinación y no puedo deletrear. Sin el corrector ortográfico soy impotente. Intento copiar todos los nombres que creo en un procesador de textos para su verificación, pero siempre echo de menos algunos. En mi último proyecto escribí una gran parte de la API y supongo que no revisé la ortografía la primera vez que usé la palabra responder y supuse que era correcto porque nadie me lo dijo. Teníamos al menos 50 funciones con respuesta. Una nueva persona entró en el equipo y preguntó por qué usamos la respuesta. Me sentí realmente tonto.
fuente
affect
(en lugar del efecto). Me volvió loco y rápidamente encontré un complemento diferente para hacer lo mismo.Bueno, me temo que mis opiniones son un poco controvertidas. Pero intentemos ...
En lo que a mí respecta, tengo que estar de acuerdo con Mike Baranczak, nombres como XxxController, XxxHandler es algo que realmente usamos a menudo. Para nosotros, un controlador es algo así como un punto de entrada para algo "encapsulado", por ejemplo, administrar transacciones, tratar errores inesperados, llamar a XxxHandler para hacer el trabajo real. Yo diría que un XxxManager es sinónimo de un controlador. Creo que es importante no usar Manager en un caso y Controller en otro. Ser consistente es muy importante si trabajas en equipo.
Sería realmente difícil o tal vez ni siquiera posible encontrar mejores nombres para cosas como esta. Xxx debe elegirse bien para aclarar la situación.
Lo que personalmente no me gusta es, cuando un método llamado get ... o set ... es más que un simple descriptor de acceso. Me gusta det ... para determinar.
Otra cosa que me viene a la mente: según el tío Bob. Una "Y" en el nombre de un método es una señal de hacer demasiado. Pero la vida no siempre es solo en blanco y negro: hay situaciones en las que creo que está bien, por ejemplo. debido a problemas de rendimiento (cuando ya tiene los datos para verificar por qué no procesarlos) ...
Personalmente, también soy un gran admirador de la notación húngara de sistemas: la mayoría de las veces se trata de código fuente en un IDE. Pero a menudo usa solo un editor o navega por el repositorio en un navegador. Una desventaja podría ser el soporte de herramientas debido a los prefijos de tipo ...
Creo que lo más importante es ser constante, una convención subóptima, para mí, es mejor que no tener una convención ...
fuente
Quizás el peor antipatrón de denominación es este:
Tenemos una lista de tres elementos de pares [foo, bar]. Si necesitamos un cuarto, tendremos que agregar nuevas columnas a la tabla.
Llevando a un código como este:
Debe crearse una tabla separada con columnas foo y bar y vincularse a la tabla de cosas:
La segunda peor es esta:
Aquí tenemos seis campos en lugar de dos instancias de una clase de Dirección.
Este antipatrón está marcado por una serie de nombres de dos partes que enumeran cada combinación de dos conjuntos, por ejemplo, [foo, bar] x [1,2,3] o [inicio, permanente] x [calle, ciudad, estado]
fuente
==
nombrando antipatrón? Estoy confundido.Cualquier clase o nombre de interfaz que sea una tautología es malo, no solo en Java del que habla el enlace, sino en cualquier idioma.
fuente
Frecuentemente encuentro bibliotecas de software con nombres genéricos como
Library
oCommon
. Indican un diseño subóptimo: los desarrolladores hacen un esfuerzo para evitar la duplicación de código pero sin ningún intento de crear un diseño descompuesto en función de la funcionalidad.fuente
Desde Microsoft al nombrar, puedo proporcionar esta lista para nombres malos:
fuente