Diagramas de dependencia: instruccionesDependency Diagrams: Guidelines

Describe la arquitectura de la aplicación en un nivel superior 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 sigue siendo coherente con este diseño validar 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. Vea 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 dependencia?What is a dependency diagram?

Al igual que 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, se denomina 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. Vea 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 diagramas de dependencia en el 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.

Nota

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 una Visual StudioVisual 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 Visual StudioVisual 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 las capas.Discover the existing dependencies between layers.

  4. Modifique las capas y dependencias para mostrar los archivos 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 para representar los principales bloques arquitectónicos o componentes y defina 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 colegas.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 la validación de capas en el proceso de compilación para asegurarse de que el código no se desvía del 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 dependencias 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.

Importante

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 se 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.

Vea 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. Se pueden crear capas a partir de 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 acerca de 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.

Sugerencia

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. Vea 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. Asignar estos artefactos de código a las capas, arrástrelos desde el Explorador de soluciones con diagramas de dependencia.Assign these code artifacts to layers by dragging them from Solution Explorer to dependency diagrams. A continuación, puede utilizar diagramas de dependencia para ayudarle 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.

Nota

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 en las 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 la admite validación columna.In Layer Explorer, examine the Supports Validation column. Dependencias no se pueden realizar ingeniería inversa de artefactos para el que se muestra esta columna 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 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. Vea 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 Establecer 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 herramienta 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 resultará más difícil de modificar 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 almacén 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 de una aplicación puede tener las capas modelo, ver 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 sobre esos patrones, vea Patterns & Practices: arquitectura de la aplicación.For more information about such patterns, see Patterns & Practices: Application Architecture.

  • Cree 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 para una característica nueva.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, contextual 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, editar la Color propiedad.In the Properties window, edit the Color property.

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

Una vez editado el diagrama, puede validarlo con el código manualmente en cualquier momento o automáticamente cada vez que se ejecute una compilación local o Team Foundation BuildTeam Foundation Build.When you have edited the diagram, you can validate it against the code manually at any time or automatically every time that you run a local build or Team Foundation BuildTeam Foundation 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 contra 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.

Nota

Medida que desarrolla o refactoriza el código, posible que tenga nuevos artefactos que deba 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 la 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, incluya la validación de capas al proceso de compilación estándar de la 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. Cuando otros miembros del equipo compilen la solución, cualquier diferencia entre las dependencias en el código y el diagrama de dependencia se notificará 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, consulte 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