Validar código con diagramas de capas
Para asegurarse de que el código no entre en conflicto con el diseño, puede validarlo con diagramas de capas en Visual Studio Ultimate y Visual Studio Premium. Esto puede ser útil para:
Encontrar los conflictos entre las dependencias del código y las dependencias del diagrama de capas.
Encontrar dependencias que podrían verse afectadas por los cambios propuestos.
Por ejemplo, puede modificar el diagrama de capas para mostrar los posibles cambios de la arquitectura y validar el código para ver las dependencias afectadas.
Refactorizar o migrar el código a un diseño diferente.
Encontrar código o dependencias que requieran trabajo al cambiar el código a una arquitectura diferente.
Puede validar código manualmente desde un diagrama de capas abierto en Visual Studio o desde un símbolo del sistema. También puede validar código automáticamente al ejecutar compilaciones locales o Team Foundation Build. Vea el vídeo de Channel 9 sobre cómo diseñar y validar la arquitectura mediante diagramas de capas.
Importante
Si desea ejecutar la validación de capa con Team Foundation Build, debe instalar también Visual Studio Ultimate en el servidor de compilación.
Requisitos
Visual Studio Ultimate o Visual Studio Premium.
Visual Studio Ultimate en el servidor de Team Foundation Build para validar código automáticamente con Team Foundation Build.
Una solución que tenga un proyecto de modelado con un diagrama de capas. Este diagrama de capas debe vincularse a artefactos de proyectos de Visual C# .NET o Visual Basic .NET que desea validar. Vea Crear diagramas de capas a partir del código.
Ver si un elemento admite validación
Incluir otros ensamblados y proyectos de .NET para su validación
Validar código manualmente
Validar código automáticamente
Solucionar problemas de validación de capas
Entender y resolver errores de validación de capas
Ver si un elemento admite validación
Puede vincular capas a sitios web, documentos de Office, archivos de texto sin formato y archivos de proyectos que se comparten entre varias aplicaciones, pero el proceso de validación no los incluirá. Los errores de validación no aparecerán para las referencias a proyectos o ensamblados que están vinculados a capas independientes cuando no aparece ninguna dependencia entre esas capas. Tales referencias no se consideran dependencias a menos que el código utilice esas referencias.
En el diagrama de capas, seleccione una o varias capas, haga clic con el botón secundario en su selección y, a continuación, haga clic en Ver vínculos.
En el Explorador de capas, examine la columna Admite validación. Si el valor es false, el elemento no admite la validación.
Incluir otros ensamblados y proyectos de .NET para su validación
Al arrastrar los elementos al diagrama de capas, se agregan automáticamente a la carpeta Referencias de capa del proyecto de modelado las referencias a los ensamblados o proyectos de .NET correspondientes. Esta carpeta contiene referencias a los ensamblados y proyectos que se analizan durante la validación. Puede incluir otros ensamblados y proyectos de .NET para validación sin arrastrarlos manualmente al diagrama de capas.
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto de modelado o en la carpeta Referencias de capa y, a continuación, haga clic en Agregar referencia.
En el cuadro de diálogo Agregar referencia, seleccione los ensamblados o proyectos y, a continuación, haga clic en Aceptar.
Validar código manualmente
Si tiene un diagrama de capas abierto vinculado a elementos de la solución, puede ejecutar el comando de acceso directo Validar desde el diagrama. También puede usar el símbolo del sistema para ejecutar el comando msbuild con la propiedad personalizada /p:ValidateArchitecture establecida en True. Por ejemplo, cuando haga cambios en el código, realice la validación de capas con regularidad para detectar pronto los conflictos de dependencia.
Para validar el código de un diagrama de capas abierto
Haga clic con el botón secundario en la superficie del diagrama y, a continuación, haga clic en Validar arquitectura.
Nota
De forma predeterminada, la propiedad Acción de compilación del archivo de diagrama de capas (.layerdiagram) se establece en Validar para que el diagrama se incluya en el proceso de validación.
La ventana Lista de errores notifica los errores que se producen. Para obtener más información sobre los errores de validación, consulte Entender y resolver errores de validación de capas.
Para ver el origen de cada error, haga doble clic en el error en la ventana Lista de errores.
Nota
Visual Studio podría mostrar un gráfico de dependencia en lugar del origen del error.Esto se produce cuando el código tiene una dependencia en un ensamblado que el diagrama de capas no especifica, o al código le falta una dependencia que el diagrama de capas especifica.Revise el gráfico de dependencia o el código para determinar si debe existir la dependencia.Para obtener más información sobre los gráficos de dependencia, vea Asignar dependencias en el código mediante gráficos de dependencias.
Para administrar los errores, consulte Administrar errores de validación.
Para validar código en el símbolo del sistema
Abra el símbolo del sistema de Visual Studio.
Elija una de las siguientes opciones:
Para validar el código comparándolo con un proyecto de modelado concreto en la solución, ejecute MSBuild con la siguiente propiedad personalizada.
msbuild <FilePath+ModelProjectFileName>.modelproj /p:ValidateArchitecture=true
O bien
Vaya a la carpeta que contiene el archivo de proyecto de modelado (.modelproj) y el diagrama de capas y, a continuación, ejecute MSBuild con la siguiente propiedad personalizada:
msbuild /p:ValidateArchitecture=true
Para validar el código comparándolo con todos los proyectos de modelado de la solución, ejecute MSBuild con la siguiente propiedad personalizada.
msbuild <FilePath+SolutionName>.sln /p:ValidateArchitecture=true
O bien
Vaya a la carpeta de soluciones, que debe contener un proyecto de modelado que contiene un diagrama de capas y, a continuación, ejecute MSBuild con la siguiente propiedad personalizada:
msbuild /p:ValidateArchitecture=true
Se mostrará cualquier error que se produzca. Para obtener más información acerca de MSBuild, vea MSBuild y MSBuild (Tarea).
Para obtener más información sobre los errores de validación, consulte Entender y resolver errores de validación de capas.
Administrar errores de validación
Durante el proceso de desarrollo, puede que desee suprimir algunos de los conflictos notificados durante la validación. Por ejemplo, es posible que desee suprimir errores de los que ya se ha ocupado o que no son pertinentes para su escenario concreto. Cuando se suprime un error, conviene registrar un elemento de trabajo en Team Foundation.
Para crear un elemento de trabajo para un error de validación
- En la ventana Lista de errores, haga clic con el botón secundario en el error, elija Crear elemento de trabajo y haga clic en el tipo de elemento de trabajo que desee crear.
Use estas tareas para administrar los errores de validación de la ventana Lista de errores:
Para |
Siga estos pasos |
---|---|
Suprimir los errores seleccionados durante la validación |
Haga clic con el botón secundario en uno o varios errores seleccionados, elija Administrar errores de validación y, a continuación, haga clic en Suprimir errores. Los errores suprimidos aparecen tachados. La próxima vez que ejecute la validación, estos errores no aparecerán. El seguimiento de los errores suprimidos se lleva a cabo en un archivo .suppressions relacionado con el archivo de diagrama de capas correspondiente. |
Detener la supresión de los errores seleccionados |
Haga clic con el botón secundario en el error o errores suprimidos seleccionados, elija Administrar errores de validación y, a continuación, haga clic en Detener supresión de errores. La próxima vez que ejecute la validación, los errores suprimidos aparecerán. |
Restaurar todos los errores suprimidos en la ventana Lista de errores |
Haga clic con el botón secundario en cualquier parte en la ventana Lista de errores, elija Administrar errores de validación y, a continuación, haga clic en Mostrar errores suprimidos. |
Ocultar todos los errores suprimidos en la ventana Lista de errores |
Haga clic con el botón secundario en cualquier parte en la ventana Lista de errores, elija Administrar errores de validación y, a continuación, haga clic en Ocultar errores suprimidos. |
Validar código automáticamente
Puede realizar la validación de capas cada vez que ejecute una compilación local. Si el equipo usa Team Foundation Build, podrá realizar la validación de capas con protecciones controladas, que se pueden especificar creando una tarea MSBuild personalizada, y usar informes de compilación para recopilar los errores de validación. Para crear compilaciones de protección controlada, consulte Utilizar un proceso de compilación de protección controlada para validar cambios.
Para validar código automáticamente durante una compilación local
- Use un editor de texto para abrir el archivo del proyecto de modelado (.modelproj) y, a continuación, incluya la siguiente propiedad:
<ValidateArchitecture>true</ValidateArchitecture>
O bien
En el Explorador de soluciones, haga clic con el botón secundario en el proyecto de modelado que contiene el diagrama o diagramas de capas y, a continuación, haga clic en Propiedades.
En la ventana Propiedades, establezca la propiedad Validate Architecture del proyecto de modelado en True.
Esto incluye el proyecto de modelado en el proceso de validación.
En el Explorador de soluciones, haga clic en el archivo de diagrama de capas (.layerdiagram) que desea utilizar para la validación.
En la ventana Propiedades, asegúrese de que la propiedad Acción de compilación del diagrama está establecida en Validar.
Esto incluye el diagrama de capas en el proceso de validación.
Para administrar los errores en la ventana Lista de errores, consulte Administrar errores de validación.
Para validar código automáticamente durante una compilación con Team Foundation Build
En Team Explorer, haga doble clic en la definición de compilación y, a continuación, haga clic en Proceso.
En Parámetros del proceso de compilación, expanda Compilación y escriba lo siguiente en el parámetro Argumentos de MSBuild:
/p:ValidateArchitecture=true
Para obtener más información sobre los errores de validación, consulte Entender y resolver errores de validación de capas. Para obtener más información acerca de Team Foundation Build, vea:
Solucionar problemas de validación de capas
En la siguiente tabla se describen problemas de validación de capas y su solución. Estos problemas difieren de los errores que son resultado de conflictos entre el código y el diseño. Para obtener más información sobre estos errores, consulte Entender y resolver errores de validación de capas.
Problema |
Causa posible |
Solución |
---|---|---|
Los errores de validación no se producen como se espera. |
La validación no funciona en los diagramas de capas que se copian de otros diagramas de capas en el Explorador de soluciones y que están en el mismo proyecto de modelado. Los diagramas de capas que se copian de esta manera contienen las mismas referencias que el diagrama de capas original. |
|
Entender y resolver errores de validación de capas
Cuando se valida el código con un diagrama de capas, se producen errores de validación si el código entra en conflicto con el diseño. Por ejemplo, las siguientes condiciones podrían producir errores de validación:
Un artefacto se ha asignado a la capa equivocada. En este caso, mueva el artefacto.
Un artefacto, como por ejemplo una clase, usa otra clase de forma que hay conflictos con su arquitectura. En este caso, tiene que refactorizar el código para quitar la dependencia.
Para resolver estos errores, actualice el código hasta no aparezcan más errores durante la validación. Puede realizar esta tarea repetitivamente.
En la sección siguiente se describe la sintaxis que se usa en estos errores, se explica el significado de los mismos y se sugiere qué se puede hacer para resolverlos o administrarlos.
Sintaxis |
Descripción |
---|---|
ArtifactN(ArtifactTypeN) |
ArtifactN es un artefacto que está asociado a una capa del diagrama de capas. ArtifactTypeN es el tipo de ArtifactN, como una Clase o un Método, por ejemplo: MiSolución.MiProyecto.MiClase.MiMétodo(Método) |
NamespaceNameN |
Nombre de un espacio de nombres. |
LayerNameN |
Nombre de una capa del diagrama de capas. |
DependencyType |
Tipo de relación de dependencia entre Artifact1 y Artifact2. Por ejemplo, Artifact1 tiene una relación Llama a con Artifact2. |
Sintaxis del error |
Descripción del error |
---|---|
AV0001: Dependencia no válida: Artifact1(ArtifactType1) --> Artifact2(ArtifactType2) Capas: LayerName1, LayerName2 | Dependencias: DependencyType |
Artifact1 de LayerName1 no debe tener dependencias con Artifact2 de LayerName2, ya que LayerName1 no tiene una dependencia directa con LayerName2. |
AV1001: Espacio de nombres no válido: Artifact Capa: LayerName | Espacio de nombres requerido: NamespaceName1 | Espacio de nombres actual: NamespaceName2 |
LayerName requiere que sus artefactos asociados pertenezcan a NamespaceName1. Artifact está en NamespaceName2, no en NamespaceName1. |
AV1002: Depende de un espacio de nombres prohibido: Artifact1(ArtifactType1) | Artifact2(ArtifactType2) Capa: LayerName | Espacio de nombres prohibido: NamespaceName | Dependencias: DependencyType |
LayerName requiere que sus artefactos asociados no dependan de NamespaceName. Artifact1 no puede depender de Artifact2 porque Artifact2 está en NamespaceName. |
AV1003: En espacio de nombres prohibido: Artifact(ArtifactType) Capa: LayerName | Espacio de nombres prohibido: NamespaceName |
LayerName requiere que sus artefactos asociados no pertenezcan a NamespaceName. Artifact pertenece a NamespaceName. |
AV3001: Falta un vínculo: la capa 'LayerName' está vinculada a 'Artifact', que no se encuentra. ¿Falta una referencia de ensamblado? |
LayerName está vinculada a un artefacto que no se encuentra. Por ejemplo, es posible que falte un vínculo a una clase porque en el proyecto de modelado falta una referencia al ensamblado que contiene la clase. |
AV9001: El análisis de arquitectura encontró errores internos. Puede que los resultados no estén completos. Vea el registro detallado de eventos de compilación o la ventana de salida para obtener más información. |
Vea el registro de eventos de compilación o la ventana de salida para obtener más información. |