Diagramas de dependencia: instruccionesDependency Diagrams: Guidelines

Describe la arquitectura de la aplicación en un nivel alto mediante la creación de diagramas de dependencia en Visual Studio.Describe your app's architecture at a high level by creating dependency diagrams in Visual Studio. Asegúrese de que el código mantiene la coherencia con este diseño, valide el código con un diagrama de dependencia.Make sure that your code stays consistent with this design by validating your code with a dependency diagram. También puede incluir la validación de capas en el proceso de compilación.You can also include layer validation in your build process. Consulte vídeo de Channel 9: diseño y validar la arquitectura mediante diagramas de dependencia.See Channel 9 Video: Design and validate your architecture using dependency diagrams.

Para ver qué versiones de Visual Studio admiten esta característica, vea Compatibilidad de versiones con las herramientas de arquitectura y modelado.To see which versions of Visual Studio support this feature, see Version support for architecture and modeling tools.

¿Qué es un diagrama de dependencias?What is a dependency diagram?

Como un diagrama de arquitectura tradicional, un diagrama de dependencia identifica los componentes primarios o las unidades funcionales del diseño y sus interdependencias.Like a traditional architecture diagram, a dependency diagram identifies the major components or functional units of the design and their interdependencies. Cada nodo en el diagrama, denominado un capa, representa un grupo lógico de espacios de nombres, proyectos u otros artefactos.Each node on the diagram, called a layer, represents a logical group of namespaces, projects, or other artifacts. Puede dibujar las dependencias que debería haber en el diseño.You can draw the dependencies that should exist in your design. A diferencia de un diagrama de arquitectura tradicional, puede comprobar que las dependencias reales del código fuente se ajustan a las dependencias especificadas que se pretenden.Unlike a traditional architecture diagram, you can verify that the actual dependencies in the source code conform to the intended dependencies that you have specified. Al incluir la validación en el proceso de compilación normal de Team Foundation ServerTeam Foundation Server, tiene la garantía de que el código de programa seguirá ajustándose a la arquitectura del sistema cuando se realicen cambios.By making validation part of a regular build on Team Foundation ServerTeam Foundation Server, you can ensure that the program code continues to adhere to the system's architecture through future changes. Consulte diagramas de dependencia: referencia.See Dependency Diagrams: Reference.

Cómo diseñar o actualizar la aplicación con diagramas de dependenciaHow to design or update your app with dependency diagrams

Los pasos siguientes proporcionan una visión general de cómo utilizar los diagramas de dependencia dentro del proceso de desarrollo.The following steps provide an overview of how to use dependency diagrams within the development process. Las secciones posteriores de este tema describen cada paso con más detalle.Later sections in this topic describe more detail about each step. Si está desarrollando un nuevo diseño, omita los pasos en los que se hace referencia al código existente.If you are developing a new design, omit the steps that refer to existing code.

Note

Estos pasos aparecen en un orden aproximado.These steps appear in approximate order. Es probable que desee superponer las tareas, reorganizarlas para que se adapten a su situación particular y revisarlas al inicio de cada iteración del proyecto.You will probably want to overlap the tasks, reorder them to suit your own situation, and revisit them at the start of each iteration in your project.

  1. Crear un diagrama de dependencia para toda la aplicación, o para una capa dentro de él.Create a dependency diagram for the whole application, or for a layer within it.

  2. Definir capas para representar las principales áreas o componentes funcionales de la aplicación.Define layers to represent primary functional areas or components of your application. Denomine estos niveles según su función, por ejemplo, "Presentación" o "Servicios".Name these layers according to their function, for example, "Presentation" or "Services". Si tiene un Programa para la mejoraVisual Studio solución, puede asociar cada capa a una colección de artefactos, como proyectos, espacios de nombres, archivos y así sucesivamente.If you have a Programa para la mejoraVisual Studio solution, you can associate each layer with a collection of artifacts, such as projects, namespaces, files, and so on.

  3. Detecte las dependencias existentes entre capas.Discover the existing dependencies between layers.

  4. Modifique las capas y dependencias para mostrar la actualización que desea que el código para reflejar el diseño.Edit the layers and dependencies to show the updated design that you want the code to reflect.

  5. Diseñe nuevas áreas de la aplicación mediante la creación de capas que representen los principales bloques arquitectónicos o componentes y definir las dependencias para mostrar cómo cada capa emplea las otras.Design new areas of your application by creating layers to represent the principal architectural blocks or components and defining dependencies to show how each layer uses the others.

  6. Editar el diseño y la apariencia del diagrama que le ayudarán a ponerse en contacto con sus compañeros.Edit the layout and appearance of the diagram to help you discuss it with colleagues.

  7. Valide el código con el diagrama de dependencia para resaltar los conflictos entre el código y la arquitectura necesaria.Validate the code against the dependency diagram to highlight the conflicts between the code and the architecture you require.

  8. Actualice el código para que se ajuste a la nueva arquitectura.Update the code to conform to your new architecture. Desarrolle y refactorice el código en iteraciones hasta que la validación no muestre ningún conflicto.Iteratively develop and refactor code until the validation shows no conflicts.

  9. Incluir validación de capas en el proceso de compilación para asegurarse de que el código seguirá ajustándose a su diseño.Include layer validation in the build process to ensure that the code continues to adhere to your design.

Crear un diagrama de dependenciaCreate a dependency diagram

Un diagrama de dependencia debe crearse dentro de un proyecto de modelado.A dependency diagram must be created inside a modeling project. Puede agregar un nuevo diagrama de dependencia a un proyecto de modelado existente, cree un nuevo proyecto de modelado para el diagrama de dependencia o copiar un diagrama de dependencia existente dentro del mismo proyecto de modelado.You can add a new dependency diagram to an existing modeling project, create a new modeling project for the dependency diagram, or copy an existing dependency diagram within the same modeling project.

Important

No agregue, arrastre ni copie un diagrama de dependencia existente de un proyecto de modelado a otro proyecto de modelado o a otra ubicación en la solución.Do not add, drag, or copy an existing dependency diagram from a modeling project to another modeling project or to another location in the solution. Un diagrama de dependencia que se copia de esta manera tendrá las mismas referencias que el diagrama original, incluso si modifica el diagrama.A dependency diagram that is copied in this way will have the same references as the original diagram, even if you modify the diagram. Esto impide que la validación de capas se haga correctamente y es posible que cause otros problemas, como la pérdida de elementos u otros errores al intentar abrir el diagrama.This will prevent layer validation from working correctly and might cause other issues, such as missing elements or other errors when trying to open the diagram.

Consulte crear diagramas de dependencia desde el código.See Create dependency diagrams from your code.

Definir capas para representar áreas o componentes funcionalesDefine layers to represent functional areas or components

Las capas representan grupos lógicos de artefactos, como proyectos, archivos de código, espacios de nombres, clases y métodos.Layers represent logical groups of artifacts, such as projects, code files, namespaces, classes, and methods. Puede crear capas desde artefactos de proyectos de Visual C# y Visual Basic, o puede adjuntar especificaciones o planes a una capa vinculando documentos como archivos de Word o presentaciones de PowerPoint.You can create layers from artifacts from Visual C# and Visual Basic projects, or you can attach specifications or plans to a layer by linking documents, such as Word files or PowerPoint presentations. Cada capa aparece como un rectángulo en el diagrama y muestra el número de artefactos vinculados a ella.Each layer appears as a rectangle on the diagram and shows the number of artifacts that are linked to it. Una capa puede contener capas anidadas que describan tareas más específicas.A layer can contain nested layers that describe more specific tasks.

Como regla general, denomine las capas según su función, por ejemplo, "Presentación" o "Servicios."As a general guideline, name layers according to their function, for example, "Presentation" or "Services". Si los artefactos tienen una estrecha interdependencia, colóquelos en la misma capa.If the artifacts are closely interdependent, place them in the same layer. Si los artefactos se pueden actualizar de forma independiente o usar en aplicaciones diferentes, sitúelos en capas distintas.If the artifacts can be updated separately or used in separate applications, place them in different layers. Para obtener información sobre los patrones de capas, visite el sitio Patterns & Practices en http://go.microsoft.com/fwlink/?LinkId=145794 .To learn about layering patterns, visit the Patterns & Practices site at http://go.microsoft.com/fwlink/?LinkId=145794.

Tip

Existen ciertos tipos de artefactos que se pueden vincular a capas, pero que no admiten la validación con el diagrama de dependencia.There are certain types of artifacts that you can link to layers but that do not support validation against the dependency diagram. Para ver si el artefacto admite la validación, abra Explorador de capas para examinar el Supports Validation propiedad del vínculo de artefacto.To see whether the artifact supports validation, open Layer Explorer to examine the Supports Validation property of the artifact link. Consulte detectar las dependencias existentes entre capas.See Discover existing dependencies between layers.

Al actualizar una aplicación desconocida, también puede crear mapas de código.When updating an unfamiliar application, you might also create code maps. Estos diagramas pueden ayudarle a detectar patrones y dependencias mientras explora el código.These diagrams can help you discover patterns and dependencies while you explore the code. También puede usar el Explorador de soluciones para examinar los espacios de nombres y las clases, que suelen corresponderse con las capas existentes.Use Solution Explorer to explore namespaces and classes, which often correspond well to existing layers. Asigne estos artefactos de código a las capas arrastrándolos desde el Explorador de soluciones a diagramas de dependencia.Assign these code artifacts to layers by dragging them from Solution Explorer to dependency diagrams. A continuación, puede usar diagramas de dependencia que le ayudarán a actualizar el código y mantener la coherencia con el diseño.You can then use dependency diagrams to help you update the code and keep it consistent with your design.

Vea:See:

Detectar las dependencias existentes entre capasDiscover existing dependencies between layers

Una dependencia existe cuando un artefacto que está asociado a una capa tiene una referencia a un artefacto que está asociado a otra capa.A dependency exists wherever an artifact that is associated with one layer has a reference to an artifact that is associated with another layer. Por ejemplo, una clase de una capa declara una variable que tiene una clase en otra capa.For example, a class in one layer declares a variable that has a class in another layer. Puede detectar las dependencias existentes aplicándoles técnicas de ingeniería inversa.You can discover existing dependencies by reverse-engineering them.

Note

No se puede realizar ingeniería inversa en las dependencias de ciertos tipos de artefactos.Dependencies cannot be reverse-engineered for certain kinds of artifacts. Por ejemplo, no se va a realizar ingeniería inversa en ninguna dependencia que tenga como origen o destino una capa vinculada a un archivo de texto.For example, no dependencies will be reverse-engineered from or to a layer that is linked to a text file. Para ver qué artefactos tienen dependencias que puede realizar ingeniería inversa, haga clic en una o varias capas y, a continuación, haga clic en ver vínculos.To see which artifacts have dependencies that you can reverse-engineer, right-click one or multiple layers, and then click View Links. En Explorador de capas, examine el admite validación columna.In Layer Explorer, examine the Supports Validation column. Las dependencias no será de ingeniería inversa para los artefactos para el que esta columna muestra False.Dependencies will not be reverse-engineered for artifacts for which this column shows False.

Para realizar ingeniería inversa de las dependencias existentes entre capasTo reverse-engineer existing dependencies between layers

  • Seleccione una o varias capas, haga clic en una capa seleccionada y, a continuación, haga clic en generar dependencias.Select one layer or multiple layers, right-click a selected layer, and then click Generate Dependencies.

    Normalmente, verá algunas dependencias que no deberían existir.Typically, you will see some dependencies that should not exist. Puede editar estas dependencias para alinearlas con el diseño buscado.You can edit these dependencies to align them with the intended design.

Editar capas y dependencias para mostrar el diseño previstoEdit layers and dependencies to show the intended design

Para describir los cambios que se va a realizar en el sistema o la arquitectura deseada, siga estos pasos para editar el diagrama de dependencia.To describe the changes that you plan to make to your system or the intended architecture, use the following steps to edit the dependency diagram. También podría realizar algunos cambios de refactorización para mejorar la estructura del código antes de extenderlo.You might also consider making some refactoring changes to improve the structure of the code before extending it. Consulte mejorar la estructura del código.See Improving the structure of the code.

EnTo Siga estos pasosPerform these steps
Eliminar una dependencia que no debería existirDelete a dependency that should not exist Haga clic en la dependencia y, a continuación, presione eliminar.Click the dependency, and then press DELETE.
Cambiar o restringir la dirección de una dependenciaChange or restrict the direction of a dependency Establezca su dirección propiedad.Set its Direction property.
Crear nuevas dependenciasCreate new dependencies Use la dependencia y dependencia bidireccional herramientas.Use the Dependency and Bidirectional Dependency tools.

Para dibujar varias dependencias, haga doble clic en la herramienta.To draw multiple dependencies, double-click the tool. Cuando haya terminado, haga clic en el puntero herramientas o presione la ESC clave.When you are finished, click the Pointer tool or press the ESC key.
Especificar qué artefactos asociados a una capa no pueden depender de los espacios de nombres especificadosSpecify that artifacts associated with a layer cannot depend on the specified namespaces Escriba los espacios de nombres en la capa Forbidden Namespace Dependencies propiedad.Type the namespaces in the layer's Forbidden Namespace Dependencies property. Use un punto y coma (;) para separar los espacios de nombres.Use a semicolon (;) to separate the namespaces.
Especificar qué artefactos asociados a una capa no deben pertenecer a los espacios de nombres especificadosSpecify that artifacts associated with a layer must not belong to the specified namespaces Escriba los espacios de nombres en la capa Forbidden Namespaces propiedad.Type the namespaces in the layer's Forbidden Namespaces property. Use un punto y coma (;) para separar los espacios de nombres.Use a semicolon (;) to separate the namespaces.
Especificar qué artefactos asociados a una capa no deben pertenecer a uno de los espacios de nombres especificadosSpecify that artifacts associated with a layer must belong to one of the specified namespaces Escriba el espacio de nombres en la capa Required Namespaces propiedad.Type the namespace in the layer's Required Namespaces property. Use un punto y coma (;) para separar los espacios de nombres.Use a semicolon (;) to separate the namespaces.

Mejorar la estructura del códigoImproving the structure of the code

Los cambios de refactorización son mejoras que no afectan al comportamiento de la aplicación, pero que facilitan los cambios y las ampliaciones del código en el futuro.Refactoring changes are improvements that do not affect the behavior of the application, but help make the code easier to change and extend in the future. Un código bien estructurado tiene un diseño que resulta fácil abstraer en un diagrama de dependencia.Well-structured code has a design that is easy to abstract to a dependency diagram.

Por ejemplo, si crea una capa para cada espacio de nombres del código y, a continuación, aplica técnicas de ingeniería inversa a las dependencias, debe haber un conjunto mínimo de dependencias unidireccionales entre las capas.For example, if you create a layer for each namespace in the code and then reverse-engineer the dependencies, there should be a minimal set of one-way dependencies between the layers. Si crea un diagrama más detallado usando clases o métodos como capas, el resultado debería tener también las mismas características.If you create a more detailed diagram using classes or methods as your layers, then the result should also have the same characteristics.

Si esto no es el caso, el código será más difícil de cambiar a lo largo de su vida útil y será menos apropiado para la validación con diagramas de dependencia.If this is not the case, the code will be more difficult to change throughout its life and will be less suitable for validation using dependency diagrams.

Diseñe nuevas áreas de la aplicaciónDesign new areas of your application

Cuando comience el desarrollo de un nuevo proyecto, o una nueva área de un nuevo proyecto, puede dibujar capas y dependencias que le ayuden a identificar los componentes primarios antes de empezar a desarrollar el código.When you start development of a new project, or a new area in a new project, you can draw layers and dependencies to help identify the major components before you start to develop the code.

  • Muestre modelos arquitectónicos identificables en los diagramas de dependencia, si es posible.Show identifiable architectural patterns in your dependency diagrams, if possible. Por ejemplo, un diagrama de dependencia que describe una aplicación de escritorio puede incluir capas como presentación, lógica del dominio y Store de datos.For example, a dependency diagram that describes a desktop application might include layers such as Presentation, Domain Logic, and Data Store. Un diagrama de dependencia que abarque una única característica dentro de una aplicación puede tener las capas modelo, vista y controlador.A dependency diagram that covers a single feature within an application might have layers such as Model, View, and Controller. Para obtener más información acerca de estos patrones, consulte Patterns & Practices: arquitectura de la aplicación.For more information about such patterns, see Patterns & Practices: Application Architecture.

  • Crear un artefacto de código para cada capa como un espacio de nombres, clase o componente.Create a code artifact for each layer such as a namespace, class, or component. De este modo, le resultará más fácil hacer un seguimiento del código y vincular los artefactos de código a las capas.This makes it easier to follow the code and to link the code artifacts to layers. Tan pronto como cree cada uno de los artefactos, vincúlelo a la capa apropiada.As soon as you create each artifact, link it to the appropriate layer.

  • No es necesario vincular la mayoría de las clases y otros artefactos a las capas pues pertenecen a artefactos mayores, como espacios de nombres que ya han vinculado a las capas.You do not have to link most classes and other artifacts to layers because they fall within larger artifacts such as namespaces that you have already linked to layers.

  • Cree un nuevo diagrama de una nueva característica.Create a new diagram for a new feature. Normalmente, habrá uno o varios diagramas de dependencia que describe toda la aplicación.Typically, there will be one or more dependency diagrams describing the whole application. Si está diseñando una nueva característica de la aplicación, no agregue ni cambie los diagramas existentes.If you are designing a new feature within the application, do not add to or change the existing diagrams. En su lugar, cree un diagrama propio en el que refleje los nuevos elementos del código.Instead, create your own diagram that reflects the new parts of the code. Las capas del nuevo diagrama pueden incluir las capas de la presentación, la lógica del dominio y la base de datos de la nueva característica.The layers in the new diagram might include presentation, domain logic, and database layers for the new feature.

    Cuando compile la aplicación, el código se validará con el diagrama general y con el diagrama más detallado de la característica.When you build the application, your code will be validated both against the overall diagram and your more detailed feature diagram.

Editar el diseño para su presentación y explicaciónEdit the layout for presentation and discussion

Para que le resulte más fácil identificar las capas y dependencias o para analizarlas con los miembros del equipo, edite el aspecto y el diseño del diagrama de los siguientes modos:To help you identify layers and dependencies or discuss them with team members, edit the appearance and layout of the diagram in the following ways:

  • Cambiar el tamaño, la forma y la posición de las capas.Change the sizes, shapes, and positions of layers.

  • Cambiar el color de las capas y las dependencias.Change the colors of layers and dependencies.

    • Seleccione una o varias capas o dependencias, con el botón secundario y, a continuación, haga clic en propiedades.Select one or more layers or dependencies, right-click, and then click Properties. En el propiedades ventana, edite el Color propiedad.In the Properties window, edit the Color property.

Valide el código con el diagramaValidate the code against the diagram

Cuando se ha editado el diagrama, puede validarlo con el código manualmente en cualquier momento o automáticamente cada vez que se compila.When you have edited the diagram, you can validate it against the code manually at any time or automatically every time that you build.

Vea:See:

Actualice el código para que se ajuste a la nueva arquitecturaUpdate the code to conform to the new architecture

Normalmente, los errores aparecerán la primera vez que valide el código con un diagrama de dependencias actualizado.Typically, errors will appear the first time that you validate code against an updated dependency diagram. Estos errores pueden tener varias causas:These errors can have several causes:

  • Un artefacto se ha asignado a la capa equivocada.An artifact is assigned to the wrong layer. En este caso, mueva el artefacto.In this case, move the artifact.

  • Un artefacto, como por ejemplo una clase, usa otra clase de forma que hay conflictos con su arquitectura.An artifact, such as a class, uses another class in a way that conflicts with your architecture. En este caso, tiene que refactorizar el código para quitar la dependencia.In this case, refactor the code to remove the dependency.

    Para resolver estos errores, actualice el código hasta no aparezcan más errores durante la validación.To resolve these errors, update the code until no more errors appear during validation. Normalmente, este es un proceso iterativo.This is usually an iterative process. Para obtener más información acerca de estos errores, vea validar código con diagramas de dependencia.For more information about these errors, see Validate code with dependency diagrams.

Note

Medida que desarrolla o refactoriza el código, es posible que tenga nuevos artefactos para vincular al diagrama de dependencia.As you develop or refactor the code, you might have new artifacts to link to the dependency diagram. Sin embargo, esto podría no ser necesario, por ejemplo, si tiene capas que representan espacios de nombres existentes, y el nuevo código solo agrega más material a estos espacios de nombres.However, this might not be necessary, for example, when you have layers that represent existing namespaces, and the new code only adds more material to those namespaces.

Durante el proceso de desarrollo, puede que desee suprimir algunos de los conflictos notificados durante la validación.During the development process, you might want to suppress some of the reported conflicts during validation. Por ejemplo, es posible que desee suprimir errores de los que ya se ha ocupado o que no son pertinentes para su escenario concreto.For example, you might want to suppress errors that you are already addressing or that are not relevant to your particular scenario. Cuando se suprime un error, conviene registrar un elemento de trabajo en Team FoundationTeam Foundation.When you suppress an error, it is a good practice to log a work item in Team FoundationTeam Foundation. Para llevar a cabo esta tarea, vea validar código con diagramas de dependencia.To perform this task, see Validate code with dependency diagrams.

Incluir validación de capas en el proceso de compilaciónInclude layer validation in the build process

Para asegurarse de que los cambios futuros en el código se ajustan a los diagramas de dependencia, incluir la validación de capas al proceso de compilación estándar de su solución.To ensure that future changes in the code conform to the dependency diagrams, include layer validation to your solution's standard build process. Siempre que otros miembros del equipo compilen la solución, las diferencias entre las dependencias en el código y el diagrama de dependencia se notificarán como errores de compilación.Whenever other team members build the solution, any differences between the dependencies in the code and the dependency diagram will be reported as build errors. Para obtener más información sobre cómo incluir la validación de capas en el proceso de compilación, véase validar código con diagramas de dependencia.For more information about including layer validation in the build process, see Validate code with dependency diagrams.

Vea tambiénSee Also