2009-06-23 20 views
9

NOTA: Este es no la interfaz de nombres populares pregunta sobre usar o no usar "I" al principio.¿Qué es un buen (lenguaje natural) esquema de nombres para las interfaces de pertenencia o propiedad

Encuentro a menudo el problema para nombrar una interfaz, que indica pertenencia o propiedad de una clase.
(Por favor, vea la lista siguiente) lluvia de ideas

Vamos, ¿qué tipo de interfaces hay?

  • Indicar el "tipo" de una clase
    DataStructure, Número, cosa

  • Indicar la "profesión" de una clase
    Comparador, Ejecutor, Oyente

  • Indique un posible acción lleva a cabo con una clase
    comparable, ejecutable, que se puede cerrar

Los anteriores son todo claro para cualquiera, pero vamos a llegar a mi problema:

  • Señalar un pertenencia o propiedad de una clase
    HasListener, LinksToRoot, BelongsToParent, KnowsSibling, ContainsChildren, llamado, WithDescription, ...?

Entonces, el último punto es mi problema. Mi inglés no es perfecto, pero incluso me siento extraño con esos nombres. Me suenan menos exitosamente elegidos que otros, menos significativos. Pero a menudo termino eligiendo este tipo de nombres.

es incluso una mayor incomodidad en C#, donde se espera que las interfaces comenzar con un 'I':
IHasListener, IKnowsSibling, ...
sonido a mí como LOLSPEAK"puedo haz un kitteh, estando completamente lleno de ternura, ¡OMG! @ #! "

Entonces, ¿cómo debería nombrar una interfaz que indica una pertenencia o propiedad de una clase?

+0

¿No es más como tipo, comportamiento y marcador posiblemente? – willcodejavaforfood

+0

Disculpe, ¿qué es un "tipo, comportamiento y posibilidad de marcador"? –

Respuesta

9

El problema es la forma en que elige describir la "pertenencia de una propiedad".

La mayoría de los ejemplos que proporcionó se pueden asignar a las otras categorías que mencionó.

Sólo unos pocos, por ejemplo:

HasListener => Instrumental Listenable

ContainsChildren => implementa Padres

WithDescription => implementa Descriptable

Trate de seguir con los esquemas de nombres más convencionales, preferiblemente los que describen su objeto de la mejor manera, más legible.

Además, asegúrese de que no está over-interface sus clases con interfaces inútiles. Haga que sea muy conciso y acertado, de lo contrario los desarrolladores que lean su código se perderán muy rápido.

+0

No creo que "HasListener => implemente Listenable" sea correcto. –

+0

hasListener() probablemente sea un método para la interfaz que se puede escuchar ... Ustedes están mezclando muchos esquemas de nombres ... –

+1

WithListener => Describable –

4

En algunos de los casos de problemas que le Contorno, creo que puede ser una respuesta mirando "del otro lado":

HasListener -> Speaker 
LinksToRoot, HasParent -> Child (or perhaps Node) 
ContainsChildren -> Parent 

Por supuesto, diferentes casos serán más o menos evidente.

+1

HasListener: una clase contiene un oyente. ¿Este hecho lo convierte en un orador? Pero los otros ejemplos son buenos. –

+0

Si no es un orador, tal vez un editor. – gooli

+0

Sí, buenos comentarios. Obviamente, Speaker fue solo un ejemplo rápido para ilustrar mi pensamiento. Supongo que el dominio problemático de la aplicación podría dar indicios de una mejor denominación: o) –

0

Creo que se puede tomar algo de lo que está haciendo y convertirlos en interfaces de tipo "profesión":

  • HasListener ->ListenerContainer
  • WithDescription ->DescriptionContainer (Describable también podría funcionar, dependiendo de qué es exactamente una "descripción" en este contexto)

Muchas de sus otras interfaces parecen tener algo que ver con una estructura en árbol. Sugeriría nombrarlos según su función en el árbol.

  • ContainsChildren ->Parent o Collection
  • BelongsToParent ->Child

En cuanto a los demás, que había necesidad de saber más acerca de lo que específicamente estas interfaces son para. Algunos de ellos, como Named, probablemente se llaman bien.

0

Esos sonidos como los nombres de interfaces terribles para mí, estoy de acuerdo. El "HasListener" suena más como una llamada a método que debería devolver un booleano que un nombre de interfaz.

Las interfaces no deberían existir para mantener/almacenar propiedades de una clase. Deben usarse para delinear una relación que deben seguir todas las clases que la implementan. Personalmente me quedo con la relación "es una". Si hay una relación directa, es decir, un gato "es un (n)" animal, entonces crearé una interfaz para él y le pondré un nombre Animal dándole un nombre razonable.

Me interesaría saber qué describe la interfaz "HasListener". ¿Qué hace exactamente? ¿Por qué no se puede llamar MyProjectListeners (reemplazando MyProject con el nombre del proyecto) que describe a qué oyentes definidos para este proyecto deben adherirse?

+0

Un objeto puede hacer mucho más que tener oyentes. Tener oyentes puede ser solo uno de los pocos aspectos que componen un objeto. Por ejemplo, una ventana puede admitir el cierre, pero también lo pueden hacer TabItems y otros objetos. Así que IClosable es una buena interfaz que describe un aspecto de un objeto más complicado. –

+0

Cerrable es de hecho un buen nombre para una interfaz. Estaba hablando más de otros nombres como "HasListener" que describe más el estado de un objeto que el objeto mismo. – amischiefr

0

HasListener es aceptable, así como Listenable. No tengo nada en contra de eso.

Pero IHasListener es terrible: en primer lugar porque realmente no necesita el prefijo I a decir que se trata de una interfaz (mirar a la firma de clase!) Y en segundo lugar porque suena como "I no se refiere Inglés ".

La única interfaz en Java que creé con el prefijo I fue IRule. :)

+0

Pero debe saber que en C# es una convención de nomenclatura, aceptada por la mayoría de los desarrolladores, para iniciar una interfaz con I. –

+0

También en Java. Nos guste o no, muchos estándares de desarrollo usan la convención de agregar "I" a los nombres de interfaz. –

0

De hecho me gusta mucho el enfoque "IHasListener".

En .NET Framework, encontrará esto en interfaces como:

  • IRaiseListChangedEvents
  • IHasXmlNode

nombres como "Listenable" sugieren que la aplicación que hace la escucha, no es que contenga un oyente. IHasListener dice claramente lo que hace.

+0

¿Cuál es su opinión sobre los otros nombres? –

Cuestiones relacionadas