¿Hay alguna guía para decidir cuándo una clase debe estar en su propio ensamblado / DLL? A menudo veo dos escuelas de pensamiento:
1) Cada "agrupación" de clases pertenece a su propia DLL, por ejemplo, repositorios, servicios, DTO, infraestructura, etc.
2) Todo debe estar en una única DLL pero separada por espacios de nombres / carpetas, por ejemplo, tener una DLL "Core" con espacios de nombres adicionales, por ejemplo, Core.Repositories, Core.Services, Core.DTO, etc.
En el trabajo, agrupamos todo en una sola Asamblea llamada "Negocios". Hay algunas carpetas, pero no hay una separación real: los objetos comerciales (con lógica, algunos de los cuales ni siquiera deberían ser clases) se agrupan en una carpeta "BusinessObjects" sin cuidado. Las cosas usadas en más de una clase están en una carpeta "Core". Las utilidades se encuentran en una carpeta de "Utilidades", la infraestructura de acceso a datos es una carpeta de "Datos": se entiende la idea.
Para un nuevo módulo en el que estoy trabajando, quiero / necesito tener una capa de acceso a datos separada (piense en una implementación de repositorio rudimentaria) pero no quiero simplemente arrojarla a la carpeta "BusinessObjects" con los otros 160 (!) clases allí. Al mismo tiempo, me preocupa crear una nueva Biblioteca de clases, ya que todos están acostumbrados a rellenar una clase en la Biblioteca individual; Sin embargo, una carpeta / espacio de nombres podría funcionar.