Ok, entiendo las convenciones normales de usar verbos con funciones y sustantivos con clases. ¿Qué pasa con las interfaces? ¿Existe alguna metodología para crear nombres de interfaz que no sea tan obvia?
Solo para dejarlo claro, no estoy hablando sobre si poner una "I" delante del nombre o si usar camelCase o PascalCase. Me pregunto sobre el método de descifrar un nombre claro y semántico para una interfaz.
EDITAR Estoy obsesionado con cómo nombrar una interfaz de la manera más clara. Supongo que también tiene que ser un sustantivo porque cuando pienso en nombrar clases, pienso en el objeto del mundo "real" más cercano con el que pueda relacionarse. Supongo que las interfaces del mundo real son cosas como un teclado, mouse, control remoto, pantalla de cajero automático. Esos son todos sustantivos. De todos modos, cualquier información adicional sobre una buena manera de formular nombres de interfaz sería apreciada.
fuente
Respuestas:
Yo diría que depende de lo que defina la interfaz. En algunos casos, cuando la interfaz es bastante específica y detallada, creo que un sustantivo es mejor. Ejemplos de ello son
IList
,ICollection
.A veces, aunque una interfaz se trata más de agregar ciertas características generales a una clase. En ese caso, creo que un adjetivo es lo mejor. Ejemplos de ello son
IDisposable
,IEnumerable
, ...Quizás otra forma de pensar sobre esto es cuántas "habilidades" define su interfaz.
Por ejemplo, la
IList<T>
interfaz define estas habilidades: Agregar, Borrar, Contiene, Insertar, Eliminar, ... Estas son todas las propiedades de una lista, por lo queIList
es un buen nombre.IDisposable
por otro lado solo define una habilidad: Eliminar. Por lo tanto, es adecuado para cualquier cosa que sea desechable. De ahí el nombreIDisposable
.fuente
IEnumerable
), un sustantivo "_er" si su interfaz se nombraría después de las cosas que su objeto hace a otros objetos ( por ejemploIEqualityComparer
), y un nombre general si su interfaz lleva el nombre de un tipo de cosa cuyo comportamiento imita (por ejemploIList<T>
).I
es redundante.Una interfaz describe el comportamiento, por lo que los nombres deberían decirlo. No estoy seguro acerca de una regla para esto, pero sabrá el nombre cuando lo escuche.
Algunos ejemplos:
Creo que no es apropiado nombrar interfaces
I
y llamarSet
con ellasISet
porque, como desarrollador, no debería preocuparse si es una interfaz o una clase. Veo que esta práctica no existe en Java ahora.fuente
I
es redundante independientemente. Entonces, ¿por qué no prefijar las clases abstractas conA
clases regulares conC
etc.?Dado que una interfaz es realmente solo una expresión del "qué" pero no del "cómo" de un tipo, los nombraría de la misma manera que usted nombra las clases, al menos desde una perspectiva de discurso. Lo único que podría agregar a esto es que a menudo van a ser más generales que los implementadores específicos (por ejemplo, la interfaz "Cliente" puede tener implementadores "ProspectiveCustomer" y "PayingCustomer").
fuente
Una interfaz se usa como una clase. Por lo tanto, también debe nombrarse con un sustantivo cuando nombra las clases con sustantivos. Prefiere sustantivos abstractos, por ejemplo "Vehículo" cuando las clases son "Coche" y "Camión".
fuente
Respuesta rápida: la interfaz es más sobre la adición de un CONJUNTO de habilidades, características, límites comunes o interconexiones entre entidades, clases, modelos, conceptos, etc.
Una cosa sobre agregar un comportamiento común a las clases y entidades, y luego aparecerá un buen nombre significativo para identificar el conjunto de características realizadas.
Nombre de interfaz como:
IStateMachineBuilder, IUserContextProviderBuilder, IEntityBuilderBuilder, IActiveAware, etc.
probablemente explique el concepto.fuente
IStateMachineBuilder
(sustantivo),IBuildStateMachine
(nombrado después de una acción),ICanBuildStateMachine
(nombrado después de una capacidad), etc.Depende, si la interfaz contiene solo métodos, será bueno nombrarla usando verbos como "Acciones" donde como si representara una clase genérica que contiene campos estáticos finales, entonces podemos usar un sustantivo genérico como "Vehículo"
fuente