2009-05-05 10 views
83

¿Cuál es el enfoque recomendado para nombrar las clases base? ¿Está prefijando el nombre de tipo con "Base" o "Resumen" o simplemente lo sumaríamos con "Base"?C# Convención de nomenclatura de clase: ¿es BaseClass o ClassBase o AbstractClass

considerar lo siguiente:

tipo: ViewModel por ejemplo MainViewModel, ReportViewModel

clase base: BaseViewModel o ViewModelBase o AbstractViewModel

Considera también:

tipo: Product por ejemplo VirtualProduct, ExpiringProduct

clase base: BaseProduct o ProductBase o AbstractProduct

¿Cuál cree que es más estándar?

class Entity : EntityBase 
{ 
} 

o

class Entity : BaseEntity 
{ 
} 
+1

Vea también [Convenciones de nombres para clases abstractas] (http://stackoverflow.com/a/429494/33499) – wimh

+0

posible duplicado de [Usando "Base" en un Nombre de Clase] (http://stackoverflow.com/questions/510839/using-base-in-a-clase-name) – nawfal

Respuesta

65

Existen ejemplos en el Framework con el sufijo Base, p. System.Configuration.Provider.ProviderBase, System.Web.SessionState.SessionStateStoreProviderBase.

Pero de ninguna manera todas las clases base abstractas en el Framework siguen esta convención (por ejemplo, System.Data.Common.DbParameter, System.Data.Common.DbCommand).

Personalmente, evitaría usar el sufijo , a menos que quisiera enfatizar el hecho de que es una clase abstracta y sentí que los usuarios de la clase podrían esperar que el nombre indique una implementación concreta.

39

Ninguna de las anteriores. Considere qué propósito proporciona su clase base; Nómbralo. Por ejemplo, la clase base de automóvil y bicicleta podría ser un vehículo.

Si está creando clases base solo para tener una clase base de una clase, y sin otro propósito o motivo que no sea eso, probablemente esté haciendo algo mal.

+13

Ese no es siempre el caso y encontrará muchas clases Base * en el marco. CollectionBase, DictionaryBase .... etc –

+1

Buen punto, los objetos del mundo real deberían caber exactamente en artefactos. La abstracción de los bienes comunes debe basarse como Vehículo, los detalles tienen que ir detrás pero también son exactos. – ruslander

+1

¿O qué tal una PageBase en una aplicación web? –

2

Utilizamos BaseEntity, pero creo que es su preferencia. Con frecuencia veo el otro.

Simplemente sea coherente dentro de su contexto, ya sea su proyecto, el espacio de nombres o, si es posible, su equipo. Diferentes convenciones son peores que una mala convención en mi humilde opinión.

2

Personalmente, recomendaría no agregar la palabra base en absoluto. Nunca se sabe cuándo tendrá que cambiar el código y ya no será el objeto base. Una vez dicho esto, hemos hecho esto en el pasado, hemos prefijado la palabra Base en el frente. Parece fluir mejor.

-1

BaseEntity se parece mucho a camel case - strName, bseEntity. Me decantaría por EntityBase ya que primero define el tema, lo que te ayudará a identificar su función más rápido.

+9

Estás hablando de notación húngara, no de carcasa de camello. La notación húngara resultó ser un camello, pero son cosas completamente diferentes. – sliderhouserules

4

Si estás hablando de clases base virtuales, las normas de Microsoft es ClassnameBase (como CollectionBase.)

-3

Pensar siempre alfabéticamente al dar nombre a las cosas. Realmente no me gusta mirar un servidor SQL y cada procedimiento almacenado se llama usp [algo]. En la misma línea, no use en exceso Get y Set como nombres principales para una función. En lugar de GetItems o PlaceOrder, piense en nombrarlos como ItemsGet o OrderPlace.

Por lo tanto, en general, ClassnameBase/EntityBase sería una mejor opción.

+7

No estoy de acuerdo; Legibilidad. GetItems tiene mucho más sentido que ItemsGet. –

+1

No estoy de acuerdo ... mismo motivo que el anterior ... pero no puedo votar ... :( – Mugunth

+0

Contrario a los otros comentarios, marcc NO ha sugerido algo como itemgsGet(). Escribió items(). –

2

Creo que es una cuestión de elección. Yo diría que si estás creando muchas clases base, entonces quizás sea mejor ir con BaseClassname siempre, porque de esa manera SIEMPRE puedes averiguar qué clases base puedes usar simplemente escribiendo Base y obteniendo el resto de la ayuda de Intellisense. ¿Qué pasaría si tuviera 20 clases base y agregara Base como sufijo y olvidara cuál era el nombre de la clase base? ¿Desea crear primero un diagrama de clase de VS y descubrir qué clases base están disponibles? Está bien nombrarlos ClassBase cuando se trata de una o dos clases.

Igual va para la decisión entre la función GetItems y ItemsGet. Yo diría que al menos por legibilidad, ve por GetItems. Siga las convenciones :)

+0

Las clases 'Base' son una OO hack, ver [comentario de Paul] (http://stackoverflow.com/a/826838/162215). A menudo son útiles y algunas veces necesarios, pero aún así son un truco. Si sientes la necesidad de buscar todas las clases base disponibles, ¿por qué es eso? ¿Qué comparten que crea su necesidad de verlas todas juntas? La respuesta podría ayudarlo a encontrar una mejor denominación. – Iain

+1

@Abhishek: la analogía de 'GetItems' no funciona-" Get "es solo un verbo y por lo tanto solo tiene sentido gramatical en inglés como prefijo, mientras que" Base "funciona como un adjetivo (prefijo) o sustantivo (sufijo) . –

+1

@Iain: La razón por la que las personas usan "Base" en los nombres de las clases no es para poder encontrar todas las clases base; la lógica está más cerca de lo opuesto. Es así que la clase base de una serie de clases relacionadas se destaca de ellas, de forma muy similar a la forma en que el prefijo "I" pretende distinguir una interfaz de las clases que la adoptan. He visto el prefijo/sufijo "Base" más a menudo cuando la clase base no es funcional en sí misma: resumen según el uso previsto, independientemente de un "resumen" forzado. –

Cuestiones relacionadas