2011-03-29 17 views
5

Estamos trabajando en un proyecto VS muy grande.¿Cómo organizar un proyecto grande con soluciones/proyectos/carpetas?

Queremos que la estructura del proyecto "insinúe" a los desarrolladores sobre los componentes lógicos y el diseño.

Para este propósito, que es mejor:

  1. Un proyecto con muchas subcarpetas y espacios de nombres
  2. divididos en varios proyectos basados ​​en la agrupación lógica de clases. Haga que todos los proyectos estén en la misma solución con las carpetas de soluciones.
  3. Igual que el # 2 pero tiene varias soluciones en lugar de una sola con subcarpetas.

Respuesta

1

Mis proyectos son enormes.

Separamos cada "módulo" en diferentes conjuntos, creando bibliotecas de clases. Algo como esto:

Client.ProjectName (Solution) 
    Client (Class Library) 
     - SectionHandler... 
     - ComponentModels... 
     - Utilities... 

    Client.Web (Class Library) 
     - Handelrs 
     - Extenders 

    Client.Net (Class Library) 
     - MailQueue 

    Client.Blog.WebControls.UI (Class Library) 
     - TopContent.ascx 
     - PostsList.ascx 

    Client.News.WebControls.UI (Class Library) 
     - TopContent.ascx 
     - PostsList.ascx 

    Client.Website 

Cada Class Library es un proyecto en la solución Client.ProjectName o bajo alguna otra solución compartida.

El sistema de archivos tiene el siguiente aspecto:

Client 
|- Framework 
    |- Client 
     |- files... 
    |- Client.Web 
     |- files... 
    |- Client.Net 
     |- files... 
|- SolutionName 
    |- Client.Blog.WebControls.UI 
    |- Client.News.WebControls.UI 
    |- Website 

libs cliente compartido va inmediatamente debajo de la carpeta Client\Framework, que está destinado a ser utilizado en todos los proyectos para este cliente. Los proyectos específicos quedan bajo la solución. También tenemos una carpeta llamada Company donde guardamos proyectos que se pueden usar en cualquier otro proyecto para cualquier cliente, es como el marco de trabajo de la compañía.

Las soluciones que utilizan:

  • Uno para el marco empresa
  • Uno para un marco cliente
  • Uno para cada solución de cliente

El mismo proyecto se puede hacer referencia en múltiples soluciones, por lo que no necesariamente es necesario crear todas esas soluciones.

Con este formato podríamos usar muchas cosas en otros proyectos simplemente haciendo referencia a una DLL. Sin esta estructura, algunos proyectos no serían posibles en el tiempo dado.

+0

¿cómo se asigna a soluciones/proyectos/carpetas? –

0

He llegado a preferir una solución única con subcarpetas para los dominios clave, y agregar los proyectos en esos. Es fácil de navegar, y le da una idea aproximada a sus desarrolladores sobre qué va a dónde.

Tener múltiples soluciones es principalmente útil si las integraciones entre los componentes de cada solución están sueltas, por lo que cada equipo tiene su solución de trabajo y pruebas contra componentes lanzados de la solución de otros equipos.

1

Las soluciones son solo contenedores para proyectos, por lo que en realidad es la división de los proyectos lo que está en cuestión.

Recomendaría utilizar un proyecto diferente (biblioteca de clases o ensamblaje AKA) para cada área funcional principal.Es posible que desee utilizar diferentes espacios de nombres dentro de cada proyecto, pero al separar las áreas funcionales principales en diferentes ensambles, se reducirá el tamaño de cada ensamblaje. Por lo tanto, si necesita usar solo una o dos funciones en una aplicación, solo hace referencia a esos dos proyectos en lugar del único proyecto masivo. Esto hará que las aplicaciones más pequeñas compilen más rápido y tengan menos gastos generales.

En términos de soluciones, puede organizarlas como desee porque, como dije, solo son contenedores. Es posible que desee ponerlos todos en una sola solución ... o tal vez cada uno en una solución separada ... o tal vez poner proyectos relacionados en soluciones. Personalmente, utilizo una solución, o para proyectos grandes, utilizo una solución "maestra" para poder compilar todo de una sola vez y soluciones individuales para que pueda trabajar en proyectos individualmente.

0

Un proyecto debe ser su "átomo" de reutilización. O para decirlo de otra manera, los proyectos son la granularidad del código reutilizable. Está bien tener proyectos interdependientes, pero cada proyecto debe planificarse para que sea útil para su propia funcionalidad.

Una solución es cualquier colección de proyectos que necesita para el desarrollo/construcción/prueba. Podría tener múltiples soluciones que especifiquen diferentes subconjuntos de proyectos.

Las carpetas dentro de un proyecto pueden ser útiles, pero podrían ser una indicación de que su proyecto es demasiado grande.

Las carpetas de soluciones también significan que su solución probablemente sea demasiado grande. ¿Puedes dividir tu base de código en múltiples soluciones, cada una con un artefacto de salida significativo y comprobable? Las soluciones pueden depender de artefactos (probados) de otras soluciones, tal como lo hacen en bibliotecas de terceros, etc.

También debe considerar cómo los proyectos de VS y soluciones se relacionan con la granularidad de los proyectos en su esquema de control de versiones y cualquier rama/fusionar las políticas que tiene.

Cuestiones relacionadas