2010-08-05 17 views
14

¿Existe una práctica general cuando se trata de cómo organizar sus clases en C#? ¿Debería haber solo una clase genérica por archivo .cs? Veo que tengo Form1.cs que incluye todas las clases relevantes para "Form1". Sin embargo, podría crear un archivo llamado Misc.cs que incluye todas las clases misceláneas. No estoy seguro de qué camino tomar para que todo permanezca organizado.Cómo organizar las clases de C#

¿O debería organizarlos de una manera específica? Por ejemplo, estoy accediendo a una base de datos MySQL, así que estoy creando un contenedor MySQL que almacenaré en MysqlWrapper.cs y nombraré la clase para que coincida. ¿Debo crear un .cs nuevo para cada clase que creo?

O debería combinar solo los que usan espacios de nombres "que usan" similares, como System.Text; usando System.Windows.Forms; etc?

Respuesta

15

Editar - esta respuesta está destinada a complementar las buenas respuestas que otros ya han publicado.

Todos los demás parecen estar respondiendo detalles. Estoy pensando que vas a tener más preguntas de diseño de "mejores prácticas".

Las directrices oficiales se pueden encontrar aquí: http://msdn.microsoft.com/en-us/library/czefa0ke(VS.71).aspx

En particular, se entierran en las Directrices de denominación, y luego en el espacio de nombres de nomenclatura directrices y pautas de denominación de la Clase.

Y, como otros han mencionado, por favor, una clase por archivo. Facilita las cosas al desarrollador de mantenimiento deficiente que te seguirá.

+4

+1 para el enlace de directrices oficiales – onof

+0

Las directrices de diseño de la biblioteca de clase solo especifican las directrices de API, pero en realidad no especifican las directrices de organización de archivos. –

+1

Todo se trata de cómo diseñar su API, pero deje los detalles privados de implementación (incluida la estructura de archivos) completamente fuera. –

13

Normalmente, creo un archivo .cs separado por clase. Además, organizo los archivos para que coincidan con el espacio de nombres de la clase.

A medida que los proyectos crecen, esto simplifica la organización, ya que siempre se sabe dónde encontrar una clase dentro del proyecto. Esto se vuelve más importante a medida que más personas trabajan en la solución también. Una clase por archivo también puede ser beneficiosa, ya que la estructura de carpetas le da una idea de la complejidad del espacio de nombres, lo que me ha ayudado a darme cuenta cuando necesito dividir espacios de nombres porque se han vuelto demasiado complejos.


veo que tengo Form1.cs que incluye todas las clases correspondientes a "Form1".

En lugar de organizar de esta manera, recomiendo separarlos en archivos separados. Si tiene bastantes clases relacionadas con una operación específica (realizada por, o accedida a través de, Form1), consideraría ponerlas en su propio espacio de nombres. También recomendaría encarecidamente cambiar el nombre de "Form1" a algo más significativo, como "EmployeeForm". Esto facilitará la comprensión y el mantenimiento de su código en el futuro.

+1

Rompo la regla para tipos muy pequeños. Por ejemplo, a menudo he creado un "Enums.class", que contiene múltiples tipos de enumeraciones. –

+0

@Brian S: Solía ​​hacer eso también, pero ahora que estoy administrando un proyecto de mayor escala con múltiples desarrolladores en múltiples ubicaciones, hago un archivo por tipo por separado, incluidas las enumeraciones simples. Dicho esto, no creo que haya nada de malo en tener "enums.cs" y similares, pero descubrí que me salvó dolores de cabeza con el tiempo para mantenerlos separados. –

+2

Personalmente, siento que cuanto más cambie la API, más importante será separarla también. Cuando tienes 5 enumeraciones en un archivo, es fácil tener un trabajo refactorizado en un enum potencialmente no utilizado, etc ... –

4

Por lo general, se acepta una clase por archivo. Algunas clases se distribuyen en varios archivos con la palabra clave "parcial". La estructura de mi carpeta no coincide con la estructura del espacio de nombres.

+0

En C#, el espacio de nombres se agrega automáticamente con el nombre de la carpeta. –

+5

@Steven - quiere decir, "En Visual Studio" en lugar de "In C#". –

+0

¿Debo? No recuerdo la función de espacio de nombres/carpeta la última vez que hice VC++, pero, de nuevo, era un proyecto pequeño. No puedo decir de una forma u otra sobre VB, porque trato de evitarlo. No he hecho suficiente F # para saber, tampoco. Pero si dice que es una función de VS, entonces está bien. –

1

No sigo estrictamente una regla de una clase por archivo. Si estoy lidiando con una clase muy grande con muchos códigos, podría darle su propio archivo. En general, sin embargo, no tengo problemas para mantener múltiples clases en el mismo archivo siempre que estén relacionadas entre sí de una manera lógica. Esto tiende a funcionar mejor con clases pequeñas, pero puede no ser la mejor idea para las grandes.

1

Como regla general, su código es más fácil de mantener (más fácil de leer para otras personas) si tiene un tipo por archivo. (class/struct/enum).

Sin embargo, con clases parciales, algunas veces dividiré grandes clases en varios archivos, según las secciones principales de funcionalidad. Si una clase tiene tipos anidados privados, casi siempre pongo esos tipos anidados en archivos separados, también.

+0

. Si realmente puede dividir una clase en secciones funcionalmente separadas, existe una buena posibilidad de que refactorice la clase en clases separadas . –

1

Normalmente tengo una clase por archivo. La única excepción a esto podría ser si una clase tiene una clase anidada privada y normalmente la mantendría dentro del mismo archivo en lugar de dividirla en una diferente usando la palabra clave parcial. De esta manera, encuentro que las cosas son más fáciles de localizar.

0

Algunos principios son todo lo que necesita:

de mantenimiento: Debe ser fácil para mantener el proyecto hasta a la fecha y corregir los errores. Preguntas: ¿llevará años encontrar una clase/función determinada? Si hay un error, ¿es probable que ocurra donde se verá el programador (que no necesariamente será el escritor)?

Complejidad: Debe quedar claro lo que hace el programa. A veces, dividirlo ayuda. A veces, mantener las cosas juntas ayuda. Preguntas: ¿Alguien estará confundido cuando lo mire? ¿Se preguntarán qué son todas las partes?

Es realmente solo sentido común. Además, tenga en cuenta que ciertas herramientas IDE le permitirán dejar las cosas en un estado desordenado y aún así poder encontrar cosas (por ejemplo, buscadores de referencia). Debes decidir qué nivel de desorden es aceptable y cuándo es el momento de refactorizar.

0

No debe combinar las clases que usan espacios de nombres "que usan" similares en un archivo, porque, si tiene que cambiar la implementación de una clase, debe mover las clases a otros archivos.

Guardo un archivo por clase, porque es muy útil con los sistemas de control de fuente. Además, evito tanto como sea posible las clases parciales. Si una clase es demasiado grande, hay algo mal en el diseño.

2

Me pueden azotar por decir esto, pero al menos en Visual Studio, probablemente ya no sea un problema tan importante como solía ser.

La mayoría de mis archivos solo tienen una clase cada uno, pero para cosas como enumeraciones triviales y clases simples de almacenamiento utilizadas solo por otra clase, simplemente las pongo en el mismo archivo que la clase principal. De lo contrario, si quiero usar la misma clase en otro lugar, movería varios archivos y trataría de adivinar cuáles necesito.

Puede hacer clic con el botón derecho en un identificador y hacer clic en Ir a definición para navegar hasta él, puede presionar ctrl + coma para buscar, o puede usar la vista de clase.

Hago grupos de archivos .cs relacionados en carpetas - ese tipo de imagen más grande parece un poco más importante. También me aseguro de que los nombres de las carpetas siempre coincidan con el espacio de nombres, es decir, guardo los espacios de nombres predeterminados que proporciona Visual Studio cuando crea un nuevo archivo de clase en una carpeta.

+1

Sí, estoy de acuerdo con las nuevas características de VS 2010 y la extensión de Pro Power Tools. No es tan importante cómo físicamente organizas tus archivos. Más importante es la arquitectura orientada a objetos de tus clases. – Agzam

+0

Sí, estoy de acuerdo con esto – GibboK

0

A veces también combino archivos de clases similares en una rama en VS.

Por ejemplo - si usted tiene 3 archivos: Message.xaml, Message.xaml.cs, MessageButton.cs, MessageImage.cs, MessageResult.cs.

Message.xaml.cs ya se mostrará dentro de la jerarquía del primer archivo.También puede agregar otros, simplemente editando el archivo del proyecto usando el bloc de notas. Solo necesita agregar

<DependentUpon> </DependentUpon> 

etiquetas donde sea necesario.

No sé si hay alguna extensión para que VS lo haga de una manera mucho más fácil.

Y aquí hay una cosa. Aunque eso le ayudará a organizar sus archivos en un proyecto, no podrá cambiar el nombre de su clase simplemente haciendo clic dos veces en el nombre del archivo en VS.

Cuestiones relacionadas