Una pregunta incómoda y abierta, pero es un problema con el que siempre me encuentro:
El software que es fácil de mantener y trabajar es un software bien diseñado. Intentar hacer un diseño intuitivo significa nombrar sus componentes de tal manera que el próximo desarrollador pueda inferir la función del componente. Es por eso que no nombramos nuestras clases "Tipo1", "Tipo2", etc.
Cuando modela un concepto del mundo real (por ejemplo, cliente), esto generalmente es tan simple como nombrar su tipo después del modelo del mundo real que se está modelando. Pero cuando construye cosas abstractas, que están más orientadas al sistema, es muy fácil quedarse sin nombres que sean fáciles de leer y de digerir.
Empeora (para mí) cuando intento nombrar familias de tipos, con un tipo base o interfaz que describe lo que los componentes tienen que hacer, pero no cómo funcionan. Naturalmente, esto lleva a que cada tipo derivado intente describir el sabor de la implementación (por ejemplo, IDataConnection
y SqlConnection
en .NET Framework), pero ¿cómo expresa algo complicado como "funciona por reflexión y busca un conjunto específico de atributos"?
Luego, cuando finalmente has elegido un nombre para el tipo que crees que describe lo que está tratando de hacer, tu colega pregunta "¿ Qué hace esto DomainSecurityMetadataProvider
realmente ? "
¿Existen buenas técnicas para elegir un nombre bien intencionado para un componente, o cómo construir una familia de componentes sin obtener nombres confusos?
¿Hay alguna prueba simple que pueda aplicar a un nombre para tener una mejor idea de si el nombre es "bueno" y debería ser más intuitivo para los demás?