2010-02-09 13 views
5

Estoy creando una biblioteca para usar con una aplicación que estoy creando. Estoy construyendo una estructura de espacios de nombres similar a la siguiente.Proyectos separados o archivos de clases múltiples ... mejores prácticas de espacio de nombres en C#

MyNamespace.Validation 
MyNamespace.Reports 
MyNamespace.Transactions 
MyNamespace.DataImport 
etc... 

¿Sería la mejor práctica para crear una solución con varios proyectos para cada sub espacio de nombres o un proyecto con múltiples archivos de clase para cada espacio de nombres de sub? Gracias.

+0

Cualquiera que elija: siempre debe (más o menos) tener un archivo por clase. – Svish

Respuesta

9

Existen ventajas y desventajas para ambos enfoques, que usted debe decidir personalmente para su propia circunstancia.

Pro para múltiples proyectos:

  • asambleas separadas permiten al compilador para proporcionar una orientación más estricta, evitando potencialmente acoplamiento se filtren a través. Esto le permite mantener las dependencias mejor.
  • Se pueden cargar montajes independientes según sea necesario en otros proyectos, lo que facilita la reutilización.
  • Los ensamblajes separados pueden evitar que se cargue código innecesario en un proceso, ya que se cargan a pedido.

Contras a múltiples proyectos:

  • un despliegue más compleja, a medida que más archivos necesitan despliegue (menor)
  • más lenta acumulación/compilar, e incluso potencialmente cargar los tiempos de carga de varios ensamblados (menor)

Personalmente, creo que los profesionales superan con creces los inconvenientes en la mayoría de los casos. Normalmente dividiré mis espacios de nombres en ensamblajes separados, siempre que no estén relacionados. En su caso, está trabajando en 4 conceptos muy diferentes, así que mi intuición es que la división tiene más sentido.

+0

+1 - aunque me inclino por el otro lado, ese primer 'Pro' es un gran problema. ¡No desea combinar tantas clases que destruya la importancia del modificador de visibilidad "interno"! –

+0

Sí. Ese primer Pro (y el tercero) es la razón principal por la que lo hago normalmente. –

2

Iría por la única solución con múltiples proyectos.

Ventajas:
- Cada proyecto puede ser una DLL separada
- Todos los proyectos en una única solución para una fácil navegación entre archivos

1

Por lo general he seguido el patrón con un conjunto es un espacio de nombres y el nombre del archivo DLL es en el espacio de nombres Más fácil de encontrar qué archivos DLL para referencia

3

Yo diría que depende.

  • En primer lugar, es una buena práctica colocar cada clase en su propio archivo.
  • Si va con un proyecto, crearía carpetas para cada espacio de nombres dentro de ese proyecto y colocaría los archivos de código en la carpeta correspondiente.
  • hacer lo anterior, Visual Studio creará automáticamente nuevos archivos de clase dentro del espacio de nombres correcta

creo que la verdadera pregunta aquí es esto, sin embargo:

Si esto sólo va nunca a utilizarse una vez, poner todo en un solo proyecto tendría sentido. Sin embargo, si este código va a ser reutilizable, debería pensar si alguna vez volvería a utilizar solo una parte (o un espacio de nombres secundario) de esta biblioteca. Si la respuesta es sí, separaría los espacios de nombres en proyectos separados, por lo que en el futuro, solo podría incluir los proyectos que necesitaba.

3

Decidir exactamente cómo dividir la solución es subjetivo, y realmente depende de los detalles de su código.

Sin embargo, una cosa es cierta: ¡el mantenimiento de múltiples conjuntos tiene inconvenientes! This article es particularmente bueno para describir esos inconvenientes, al observar cómo agregan los costos en el tiempo de desarrollo, el tiempo de compilación, el tiempo de implementación y el tiempo de ejecución.

Utilizo el menor número posible de ensamblajes, apuntando a un solo ensamblaje mientras se aíslan las áreas volátiles del dominio. Cuando múltiples ensamblajes son claramente apropiados o requeridos (y a menudo lo son, particularmente para forzar el desacoplamiento), hago mi mejor esfuerzo para agrupar interfaces que cambiarán al mismo tiempo en los mismos ensamblajes.

Cuestiones relacionadas