¿Carpetas o proyectos en una solución de Visual Studio?


Al dividir una solución en capas lógicas, ¿cuándo es mejor usar un proyecto separado sobre solo agrupar por una carpeta?

Author: Mark Cidade, 2008-08-05

7 answers

De forma predeterminada, siempre crea una nueva carpeta dentro del mismo proyecto

  • Obtendrá una sola asamblea (sin ILMerge gimnástica adicional)
  • Más fácil de ofuscar (porque tendrá menos tipos y métodos públicos, idealmente ninguno en absoluto)

Separar su código fuente en varios proyectos solo tiene sentido si usted...

  • Tienen algunas partes del código fuente que son parte del proyecto pero no se pueden implementar por defecto o en absoluto (unidad pruebas, complementos adicionales, etc.)
  • Más desarrolladores involucrados y desea tratar su trabajo como caja negra consumible. (no muy recomendable)
  • Si puede separar claramente su proyecto en capas/módulos aislados y desea asegurarse de que no puedan consumir de forma cruzada miembros internos. (tampoco se recomienda porque tendrá que decidir qué aspecto es el más importante)

Si crees que algunas partes de tu código fuente podrían ser reutilizables, no lo hagas crear un nuevo proyecto. Simplemente espere hasta que realmente desee reutilizarlo en otra solución y aislarlo del proyecto original según sea necesario. La programación no es un lego, la reutilización suele ser muy difícil y a menudo no sucederá como estaba previsto.

 17
Author: lubos hasko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-04 22:54:47

Separar las características en proyectos es a menudo una optimización de la arquitectura YAGNI. ¿Con qué frecuencia has reutilizado esos proyectos separados, realmente? Si no es una ocurrencia frecuente, está complicando su desarrollo, compilación, implementación y mantenimiento para la reutilización teórica.

Prefiero separarme en carpetas (usando espacios de nombres apropiados) y refactorizar para separar proyectos cuando tienes un caso de uso de reutilización en la vida real.

 8
Author: Jon Galloway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-17 17:35:22

Denny escribió:

Personalmente siento que si el código reutilizable se divide en proyectos, es más fácil usar otros lugares que si solo está en carpetas.

Realmente estoy de acuerdo con esto: si puedes reutilizarlo, debería estar en un proyecto separado. Dicho esto, también es muy difícil de reutilizar de manera efectiva:)

Aquí en SO, hemos tratado de ser muy simples con tres proyectos:

  • MVC Proyecto web (que hace un buen trabajo de separar sus capas en carpetas por defecto)
  • Proyecto de base de datos para el control de código fuente de nuestra base de datos
  • Pruebas unitarias contra modelos/controladores MVC

No puedo hablar por todos, pero estoy contento con lo simple que lo hemos mantenido: ¡realmente acelera las compilaciones!

 6
Author: Jarrod Dixon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-04 22:42:55

Normalmente hago un proyecto para la GUI un proyecto para la lógica de negocio un proyecto para el acceso a datos y un proyecto para pruebas unitarias.

Pero a veces es prudente tener una separación basada en servicios (si está utilizando una arquitectura orientada a servicios) como Autenticación, Ventas, etc.

Supongo que la regla de oro de la que trabajo es que si puedes verlo como un componente que tiene una clara separación de preocupaciones, entonces un proyecto diferente podría ser prudente. Pero yo pensaría que las carpetas frente a los proyectos podría ser solo una preferencia o filosofía.

Personalmente siento que si el código reutilizable se divide en proyectos, es más fácil usar otros lugares que si solo está en carpetas.

 4
Author: denny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-04 22:14:17

Separando su código fuente en múltiples proyectos solo tiene sentido si usted... ... Más desarrolladores involucrados y quieres tratar su trabajo como caja negra de consumibles. (no muy recomendar) ...

¿Por qué no se recomienda esto? Me ha parecido una forma muy útil de gestionar una aplicación con varios desarrolladores trabajando en diferentes porciones. Hace que los checkins sean mucho más fáciles, principalmente al eliminar virtualmente las fusiones. Muy rara vez dos desarrolladores tendrán que trabajar en el mismo proyecto al mismo tiempo.

 0
Author: rjrapson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-17 17:19:51

Si va a crear varios proyectos, asegúrese de que todos los que agregan código a la solución sean plenamente conscientes de la intención de ellos y haga todo lo posible para que entiendan las dependencias entre los proyectos. Si alguna vez ha tratado de resolver el lío cuando alguien ha ido y agregó referencias que no deberían haber estado allí y se salió con la suya durante semanas, comprenderá este punto

 0
Author: Oskar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-09-10 21:36:06

Realmente creo que es mejor dividir el proyecto, pero todo depende del tamaño del proyecto y el número de personas que trabajan en ella.

Para proyectos más grandes, tengo un proyecto para

  • acceso a los datos (modelos)
  • servicios
  • front end
  • pruebas
Conseguí el modelo de Rob Connery y su aplicación de escaparate... parece funcionar muy bien.

Mvc-storefront

 0
Author: user10479,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-27 12:12:23