La comunidad C # ha utilizado de manera tan ubicua el prefijo "I" para denotar una interfaz que incluso los programadores más inexpertos saben usar.
¿Por qué entonces no prefijamos enumeraciones, clases abstractas o estructuras (posiblemente con "E", "A" y "S" respectivamente)?
Por ejemplo, si marcamos todas las clases abstractas con una "A", proporcionaría información valiosa sobre ese tipo que, aunque podría inferirse, no es inmediatamente obvio.
Tenga en cuenta que no estoy abogando por este cambio, solo estoy tratando de entender por qué no hacemos las cosas de esta manera.
Este hilo responde por qué usamos el prefijo "I" pero no responde por qué no usamos otros prefijos.
c#
.net
coding-standards
source-code
Stephen
fuente
fuente
Respuestas:
El objetivo de la convención de nomenclatura para las interfaces es proporcionar una decisión rápida y sin cerebro sobre cómo llamar a la interfaz que implementa su clase. Si tiene un
Frobnicator
, pero tiene que declarar una interfaz para desacoplarse o por cualquier motivo, entonces la decisión de llamarlo noIFrobnicator
requiere un pensamiento consciente, y esto es bueno.El mismo problema no se aplica a las otras construcciones que nombre. Las enumeraciones y las estructuras son útiles, pero no es necesario encontrar un segundo nombre corto, transparente y obviamente relacionado, además del nombre en sí. Por lo tanto, no hay presión para colocar una 'E' en el nombre de una enumeración o estructura.
(Las clases abstractas son algo similares a las interfaces, ya que debe proporcionar una segunda clase concreta para hacer cualquier cosa, por lo que podrían haber adquirido una convención de comenzar con 'A', pero por cualquier razón, no lo hicieron. Se me permite especular, creo que 'yo' siendo una carta particularmente estrecha podría haber tenido algo que ver con eso).
fuente
AnimalBase
y sabores distintos sonAnimalGiraffe
,AnimalLion
etcList
, ya que son muy técnicamente nombradasArrayList
yLinkedList
son los nombres de las implementaciones. (C #, creo, tieneIList
como interfaz yList
como la lista de matriz)Point p = myPoints[3]; p.X += 3;
afectaríamyPoints[3].X
. Retrospectivamente, hubiera preferido que C # se usaravar->field
para acceso de campo de clase yvar.field
para acceso de campo de estructura, pero obviamente no es así. Aún así, parecería que algunos medios a simple vista para distinguirlos serían útiles.Creo que no se usa mucho porque:
De ese último punto y de alguna interpretación que podría concluir. El sistema húngaro (tipo de prefijo) es malo y no debe usarse. Apps húngaro (tipo de prefijo) tiene usos.
Retomando su pregunta, creo que su notación propuesta es una forma de aplicaciones húngaras y si cree que el valor agregado se suma a los costos y lo implementa consistentemente en su base de código, está bien. Pero como debe considerarlo por proyecto, no debería ser una regla general.
Supongo que la gente notó que era más importante para las interfaces y es por eso que se ha convertido en una regla general para las interfaces.
fuente
Solo un pensamiento (con suerte aplicable):
Hay una tendencia obvia hacia la "codificación de interfaces" en lugar de clases concretas. "Hoy en día" casi parece más beneficioso tener una convención de nomenclatura para las clases, como comenzar con una 'C', en lugar de tener la letra 'I' para la interfaz.
Acabo de terminar un proyecto Java en el que todas las interfaces se llamaban realmente Modelo ... Sí, la convención del nombre de la interfaz era terminar el nombre con 'Modelo' ... luego tener algún tipo de 'DataTransferObject / DTO' implementar la interfaz como :
mientras que en C #
Cambié el cableado de mi cerebro para mantener ese dolor directo, pero puedo ver cómo podría ayudar pensar en términos de programación en la interfaz.
fuente