如何:从项目中创建层关系图

在 Visual Studio 旗舰版中,使用层关系图可直观显示系统的高级体系结构并可确保代码与设计保持一致。若要执行此任务,请组织 Visual Studio 解决方案中的项目并将这些项目与逻辑抽象组或层相关联。这些层描述项目执行的主要任务和系统的主要组件。

各层之间的箭头表示依赖关系,指示各层是否可以使用其他层中的功能。 若要强制对代码实施体系结构约束,请在关系图上描述预期的依赖关系,然后对照关系图验证代码。 通过以这种方式使用层关系图,可以使代码更易于理解、更新、重用和维护。

层关系图上的元素

有关层关系图的更多信息,请参见以下主题:

主题内容

  • 创建层关系图。

  • 从现有项目创建层。

  • 管理层和项目之间的链接。

  • 对现有依赖关系进行反向工程处理。

  • 更新层关系图以显示预期的设计。

  • 更改关系图上元素的外观。

创建层关系图

层关系图必须在建模项目内部创建。 可以将新的层关系图添加到现有建模项目中,也可以在解决方案中为新层关系图创建新的建模。

向建模项目中添加新层关系图

  1. 在**“体系结构”菜单上,单击“新建关系图”**。

  2. 在**“模板”下单击“层关系图”**。

  3. 命名该关系图

  4. 在**“添加到建模项目”**中,浏览到解决方案中的一个现有建模项目,并选择该项目。

    - 或 -

    单击**“新建建模项目”**,向解决方案中添加一个新建模项目。

    提示

    层关系图必须存在于建模项目内。 不过,您可以将其链接到存在于解决方案中任何位置的项目。

您还可以在相同的建模项目内复制现有的层关系图。

提示

不要将现有层关系图从一个建模项目添加、拖动或复制到另一个建模项目或解决方案中的其他位置。 一个以这种方式复制的层关系图将具有与原始关系图相同的引用,即使您修改该关系图也是如此。 这将阻止层验证正常操作,并可能导致出现其他问题,如尝试打开该关系图时元素缺失或出现其他错误。

若要复制层关系图,请按下面的步骤操作:

复制现有层关系图

  1. 向建模项目中添加一个新的层关系图。

  2. 将源层关系图中的元素复制到新层关系图。

从项目中创建层

您可以从 Visual Studio 解决方案内的项目(例如项目、代码文件、命名空间、类和方法)中创建层。 这样将自动在这些层和项目(包括在层验证过程中)之间创建链接。 您也可以将层链接到不支持层验证的特定类型的项目。 例如,您可以将层链接到 Word 文档或 PowerPoint 演示文稿等文件。 这对将层与规范或计划相关联非常有用。若要确定链接的项目是否支持验证,请打开**“层资源管理器”并检查项目的“支持验证”**属性。 有关更多信息,请参见管理指向项目的链接。

每个层在关系图中显示为一个矩形框,并且可以包含描述更详细任务的嵌套层。 有关分层模式的更多信息,请访问 Patterns & Practices(模式和实践)网站。

层上的数字指示链接到该层的项目数。 但在读取此数字时,请记住以下事项:

  • 如果某个层链接到一个包含其他项目的项目,但该层未直接链接到其他项目,则该数字仅包括链接的项目。 但是,在层验证过程中其他项目包括在分析范围内。

    例如,如果一个层链接到单个命名空间,则链接的项目数是 1,即使该命名空间包含类也是如此。 如果该层还链接到命名空间中的每个类,则该数字将包括链接的类。

  • 如果一个层包含链接到项目的其他层,则容器层也链接到这些项目,即使容器层上的数字不包括这些项目。

在创建层关系图时,您可以创建依赖项关系图来帮助浏览和理解代码。 这些关系图可帮助您发现代码中的群集、模式、自然层和依赖关系。 这样,您将可以更轻松地为层分配项目。 您还可以使用体系结构资源管理器来浏览命名空间和类,它们通常与现有层具有很好的对应关系。 然后,您可以使用层关系图帮助您更新代码。

有关更多信息,请参见下列主题:

使用以下任务来创建层:

若要

请执行这些步骤

为单个项目创建一个层

  1. 将项目从以下任意来源拖到层关系图上:

  2. 重命名层以反映关联代码或项目的作用。

为所有选择的项目创建单个层

同时将所有项目拖到层关系图上。

一个层将出现在关系图上,并链接到所有这些项目。

为每个所选的项目创建一个层

按住 Shift 键的同时将所有项目同时拖到层关系图上。

注意注意
如果使用 Shift 键选择一系列项,请在选择了项目之后松开该键。将这些项目拖到关系图上时再次按住该键。

每个项目的层将出现在关系图上,并链接到该项目。

向层中添加项目

将项目拖到层上。

创建新的未链接的层

“工具箱”中,展开“层关系图”部分,然后将“层”拖到层关系图上。

若要添加多个层,请双击该工具。 完成操作后,单击“指针”工具或按 Esc 键。

- 或 -

右击层关系图,指向“添加”,然后单击“层”

创建嵌套的层

将现有层拖到另一个层上。

- 或 -

右击某个层,指向“添加”,然后单击“层”

创建包含两个或更多现有层的新层

选择层,右击所选的层,然后单击“组”

更改层的颜色

将其“颜色”属性设置为所需的颜色。

指定与层关联的项目必须不属于指定的命名空间

在层的“Forbidden Namespaces”属性中键入命名空间。 使用分号 (;) 分隔多个命名空间。

指定与层关联的项目不能依赖于指定的命名空间

在层的“Forbidden Namespace Dependencies”属性中键入命名空间。 使用分号 (;) 分隔多个命名空间。

指定与层关联的项目必须属于某个指定的命名空间

在层的“Required Namespaces”属性中键入命名空间。 使用分号 (;) 分隔多个命名空间。

管理层和项目之间的链接

  1. 在层关系图上,右击一个层,然后单击**“查看链接”**。

    **“层资源管理器”**将显示所选层的项目链接。

  2. 使用以下任务管理这些链接:

若要

在层资源管理器中

删除层与项目之间的链接

右击项目链接,再单击“删除”

将链接从一个层移到另一个层

将项目链接拖到关系图上的一个现有层。

- 或 -

  1. 右击项目链接,然后单击“剪切”

  2. 在层关系图上,右击层,然后单击“粘贴”

将链接从一个层复制到另一个层

  1. 右击项目链接,然后单击“复制”

  2. 在层关系图上,右击层,然后单击“粘贴”

基于现有项目链接创建一个新层

将项目链接拖到关系图上的空白区域。

验证链接的项目是否支持对照层关系图的验证。

查看项目链接的“支持验证”列。

对现有依赖关系进行反向工程处理

只要与一个层关联的项目引用与另一个层关联的项目,就存在依赖关系。 例如,一个层中的某个类声明了一个拥有其他层中的某个类的变量。 您可以对关系图上链接到层的项目的现有依赖关系进行反向工程处理。

提示

无法为某些种类的项目对依赖关系进行反向工程处理。 例如,对于链接到文本文件的层,将不会对源自或指向该层的依赖关系进行反向工程处理。 若要查看哪些项目具有可进行反向工程处理的依赖关系,请右击一个或多个层,然后单击“查看链接”。 在“层资源管理器”中,检查“支持验证”列。 对于此列显示“False”的项目,将不会对依赖关系进行反向工程处理。

对层之间的现有依赖关系进行反向工程处理

  • 选择一个或多个层,右击所选的层,然后单击**“生成依赖项”**。

通常,您会看到一些不应存在的依赖关系。 可以编辑这些依赖关系,使它们与预期的设计对齐。

更新关系图以显示预期的设计

若要显示计划进行的更改或所需的体系结构,请更新层关系图。

若要

执行这些步骤

删除不应存在的依赖项

单击依赖项,然后按“Delete”

更改或限制依赖项的方向

设置其“方向”属性。

创建新的依赖项

使用“依赖项”“双向依赖项”工具。

若要绘制多个依赖关系,请双击该工具。 完成操作后,单击“指针”工具或按 Esc 键。

指定与层关联的项目不能依赖于指定的命名空间

在层的“Forbidden Namespace Dependencies”属性中键入命名空间。 使用分号 (;) 分隔多个命名空间。

指定与层关联的项目必须不属于指定的命名空间

在层的“Forbidden Namespaces”属性中键入命名空间。 使用分号 (;) 分隔多个命名空间。

指定与层关联的项目必须属于某个指定的命名空间

在层的“Required Namespaces”属性中键入命名空间。 使用分号 (;) 分隔多个命名空间。

更改关系图上元素的外观

若要帮助标识层和依赖关系或与团队成员讨论这些层和依赖关系,请通过以下方式编辑关系图的外观和布局:

  • 更改层的大小、形状和位置。

  • 更改层和依赖项的颜色。

    1. 选择层或依赖关系。

    2. 右击所选的层或依赖关系,然后单击**“属性”**。

    3. 在**“属性”窗口中,更改“颜色”**属性。

请参见

概念

显示现有代码