En .NET (Visual Studio), ¿cuándo creas un nuevo ensamblaje?

9

Estoy trabajando en una aplicación Silverlight. Lo he dividido en varios ensamblajes:

  • Dominio
  • Repositorios (todo con persistencia en la base de datos de Sterling)
  • UI
  • ...

Así es como lo aprendí, pero me preguntaba. Si sabe que las DLL no se van a reutilizar, ¿es necesario dividirlas? ¿O podría poner todo en un ensamblaje y usar carpetas y espacios de nombres para mantenerlo ordenado?

También he visto proyectos que tienen demasiados ensamblajes. En lugar de usar espacios de nombres donde hubiera sido apropiado.

Entonces: ¿cuándo creas un nuevo ensamblaje para una nueva pieza de código? ¿Algún buen recurso sobre este tema? ¿Y divide el código técnicamente (dominio, datos, interfaz de usuario, etc.) y / o funcionalmente (es decir, administración del paciente, médico del paciente, logística del hospital, ... probablemente solo para aplicaciones más grandes de nivel empresarial)?

Peter
fuente

Respuestas:

1

Recomiendo crear ensamblados separados para clases que lógicamente caen en "módulos". Esto no solo es bueno para la reutilización y el mantenimiento, sino que también es una forma de imponer la menor cantidad de dependencias entre clases.

La misión será minimizar el número de referencias a otros ensamblajes que cada ensamblaje necesita, principalmente esto se hará a través de interfaces y eventos. Tener clases en diferentes ensamblajes hará que las dependencias sean muy obvias. Compare eso con si solo usa un ensamblaje, entonces es muy fácil dejar de pensar en las dependencias ya que todo es accesible.

Por supuesto, no debe exagerar, sino separarse cuando corresponda. Piénselo de esta manera: "Estas clases van juntas y no necesitan saber sobre estas clases" y se separan en esa línea.

Homde
fuente
1
Depende de lo que quiera decir con "módulos", pero normalmente divido la lógica relacionada usando espacios de nombres en lugar de ensamblados. Recuerde, los espacios de nombres pueden abarcar conjuntos. Los ensamblajes son la unidad de implementación y, por lo tanto, debe considerar cortar sus ensamblajes para que coincidan con su escenario de implementación.
Ed James
3
No es Buena idea. VS se vuelve muy lento cuando una solución contiene más de unos pocos proyectos.
nikie
44
Si su VS se vuelve demasiado lento, está ejecutando una versión anterior o una computadora lenta. Tengo grandes proyectos con más de 30 proyectos que se compilan en segundos. Por otra parte, tengo muchos ram, núcleos y un SSD :) No debes exagerar, por supuesto, sino solo separarte cuando sea apropiado, piensa así: "Estas clases van juntas y no es necesario que las conozcas" y separado en esa línea
Homde
Marcó esto como respuesta debido al comentario sobre las dependencias. La respuesta de Ed James es al menos tan valiosa y correcta, pero esta respuesta es más aplicable a mi situación.
Peter
2
Siguiendo este enfoque podría terminar con un montón de asambleas: A, B, C, D, E, F, G, H, I, J, K. Dondequiera que se hace referencia de montaje A, también se debe hacer referencia a sus ensamblados dependientes: B, C, D. Pero el montaje Cdepende de: E, F, G, Hpor lo que vamos a necesitar los mismos. Entonces, cada vez que necesite alguna función A, debe extraer 7 ensamblajes adicionales para que funcione; asegurándose de obtener las versiones correctas de cada ensamblaje. Bienvenido a la nueva DLL Hell.
Ed James
14

Un ensamblado es la unidad de implementación para una aplicación .NET; por lo tanto, debe considerar hacer coincidir el corte de sus ensamblajes con su arquitectura de implementación.

Los ensamblados también son útiles cuando necesita un control de versión separado en algún código. Por ejemplo, cuando tiene interfaces comunes que se beneficiarían del control de versiones independiente, debe separar ese código en un ensamblado.

Recuerde que los espacios de nombres pueden abarcar conjuntos. En muchos casos, es suficiente separar el comportamiento usando espacios de nombres. Mire el .NET mscorlib.dllque en un solo ensamblado contiene código que cubre una amplia gama de comportamientos separados solo por un espacio de nombres.

Si desea alguna autoridad sobre este tema, no busque más allá de:

Pautas de diseño del marco

Pautas de diseño del marco: convenciones, modismos y patrones para bibliotecas .NET reutilizables (2ª edición) por Krzysztof Cwalina y Brad Abrams.

Ed James
fuente
Gracias por la referencia del libro de hecho. Lo comprobaré ¿Podría dar más detalles sobre la arquitectura de implementación? ¿En qué diferiría la implementación de 10 archivos DLL de la implementación de 1? ¿A menos que pueda actualizar uno de los diez archivos, mientras que los demás permanecen intactos?
Peter
1
@ Peter: si codificó 10 ensamblajes que siempre se implementan juntos, entonces podría haber simplificado el control de la versión y la implementación al colocar todo el código en un solo ensamblaje. Si los 10 ensamblajes no siempre se implementan juntos, puede ser útil tener ensamblajes separados.
Ed James