层关系图:指南
可以描述您的应用程序的体系结构在高级可以通过创建 层 关系图在最终的 Visual Studio。若要确保,您的代码保持一致。此模型,请验证与层关系图的代码在最终的 Visual Studio 或 Visual Studio premium。在生成还可以包括层验证过程。请参见 视频的通道 9:使用层关系图,设计并验证您的体系结构。
什么是层关系图?
层关系图类似于传统的体系结构示意图,标识了设计的主要组件或功能单元及其相互依赖关系。关系图上的每个节点称为一层,表示由命名空间、项目或其他项组成的一个逻辑组。可以绘制设计中应存在的依赖项。与传统的体系结构示意图不同的是,在层关系图中,您可以验证源代码中的实际依赖关系与您已指定的计划依赖关系是否相符。通过使验证成为在 Team Foundation Server 上进行的定期生成过程的一部分,您可以确保程序代码在将来系统体系结构更改时能继续符合该体系结构。请参见 层关系图:参考。
如何设计或更新您的层关系图的 app
下面的步骤概述如何在开发过程中使用层关系图。本主题后面的部分将对每一步骤进行详细介绍。如果您正在开发新设计,请忽略引用现有代码的步骤。
说明 |
---|
这些步骤的显示顺序大致就是执行顺序。您可能希望重叠执行任务或重新排列步骤顺序以符合自己的情况,以及在每个项目迭代开始时重新执行这些步骤。 |
为整个应用程序或其内部的某个层创建层关系图。
定义层以表示应用程序的主功能区域或组件。根据层功能命名这些层,例如“演示”或“服务”。如果您具有一个 Visual Studio 解决方案,则可以将每个层与一个项目集合(如项目、命名空间、文件等)相关联。
在各层之间发现现有依赖项。
编辑层和依赖项以显示您希望代码反映的更新的设计。
通过创建表示主体体系结构块或组件的层,以及定义显示各个层如何利用其他层的依赖项设计应用程序的新区域。
编辑关系图的布局和外观以帮助您与同事进行讨论。
对照层关系图验证代码以突出显示代码与您需要的体系结构之间的冲突。
更新代码使其符合新体系结构。以迭代方式开发和重构代码,直到此验证不再显示任何冲突。
在生成过程中包含层验证以确保代码将持续符合您的设计。
创建层关系图
层关系图必须在建模项目内部创建。可以将新的层关系图添加到现有建模项目,创建层关系图的建模项目或复制在同一建模项目中的现有层关系图。
重要事项 |
---|
不要将现有层关系图从一个建模项目添加、拖动或复制到另一个建模项目或解决方案中的其他位置。一个以这种方式复制的层关系图将具有与原始关系图相同的引用,即使您修改该关系图也是如此。这将阻止层验证正常操作,并可能导致出现其他问题,如尝试打开该关系图时元素缺失或出现其他错误。 |
请参见 从代码中创建层关系图。
定义表示功能区域或组件的层
层表示项目的逻辑组,如项目、代码文件、命名空间、类和方法。可以从项目中创建层从 Visual C# .NET 和 Visual Basic .NET 项目,也可以附加规范或对一层的计划通过将文档,例如 Word 文档或 PowerPoint 演示文稿。每个层都显示为关系图上的一个矩形,并显示链接到该层的项目数。层可以包含描述更详细任务的嵌套层。
一般原则是,根据层功能命名层,例如“演示”或“服务”。应将依赖关系紧密的项目放在同一层上。应将可以分别更新或在不同的应用程序中使用的项目放在不同的层中。若要了解有关分层模式的信息,请访问“Patterns & Practices”(模式和实践)网站,网址为 https://go.microsoft.com/fwlink/?LinkId=145794。
提示 |
---|
有一些您可链接到层但不支持对照层关系图进行验证的项目类型。若要确定项目是否支持验证,请打开“层资源管理器”以检查项目链接的“支持验证”属性。层和项目之间的托管链接参见。 |
在更新不熟悉的应用程序时,您可以使用依赖项关系图来帮助浏览和理解代码。这些关系图可帮助您发现代码中的群集和依赖关系。您还可以使用体系结构资源管理器来浏览命名空间和类,它们通常与现有层具有很好的对应关系。这有助于使您能够更轻松地为层分配项目。然后,您可以使用层关系图帮助您更新代码。
有关更多信息,请参见下列主题:
查看各层之间的现有依赖项
只要与一个层关联的项目引用与另一个层关联的项目,就存在依赖关系。例如,一个层中的某个类声明了一个拥有其他层中的某个类的变量。通过反向工程处理可以发现现有的依赖关系。
说明 |
---|
无法为某些种类的项目对依赖关系进行反向工程处理。例如,对于链接到文本文件的层,将不会对源自或指向该层的依赖关系进行反向工程处理。若要查看哪些项目具有可进行反向工程处理的依赖关系,请右击一个或多个层,然后单击“查看链接”。在“层资源管理器”中,检查“支持验证”列。对于此列显示“False”的项目,将不会对依赖关系进行反向工程处理。 |
对层之间的现有依赖关系进行反向工程处理
- 选择一个或多个层,右击所选的层,然后单击**“生成依赖项”**。
通常,您会看到一些不应存在的依赖关系。可以编辑这些依赖关系,使它们与预期的设计对齐。
编辑层和依赖项以显示预期的设计
若要描述您计划对系统或计划的体系结构的更改,请使用以下步骤来编辑层关系图。您也许还会考虑进行一些重构更改,以改进代码的结构,然后再扩展代码。改进代码的结构参见。
若要 |
执行这些步骤 |
---|---|
删除不应存在的依赖项 |
单击依赖项,然后按“Delete”。 |
更改或限制依赖项的方向 |
设置其“方向”属性。 |
创建新的依赖项 |
使用“依赖项”和“双向依赖项”工具。 若要绘制多个依赖关系,请双击该工具。完成操作后,单击“指针”工具或按 Esc 键。 |
指定与层关联的项目不能依赖于指定的命名空间 |
在层的“Forbidden Namespace Dependencies”属性中键入命名空间。使用分号 (;) 分隔多个命名空间。 |
指定与层关联的项目必须不属于指定的命名空间 |
在层的“Forbidden Namespaces”属性中键入命名空间。使用分号 (;) 分隔多个命名空间。 |
指定与层关联的项目必须属于某个指定的命名空间 |
在层的“Required Namespaces”属性中键入命名空间。使用分号 (;) 分隔多个命名空间。 |
改进代码的结构
重构更改就是一些改进,它们不会影响应用程序的行为,但有助于使代码在将来能更方便地进行更改和扩展。结构良好的代码具有很容易抽象化为一个层关系图的设计。
举例来说,如果您为代码中的每个命名空间创建一个层,然后对依赖关系进行反向工程处理,那么各层之间应存在单向依赖项的最小集。如果您将类或方法用作层,创建更详细的关系图,那么结果也应具备相同的特性。
如果不是这样,则代码在其生命周期中将难以更改,并且不太适合使用层关系图进行验证。
设计应用程序的新区域
开始新项目的开发或新项目中的崭新领域时,您可以在开始开发代码之前绘制层和依赖项以帮助标识主要组件。
如有可能,在您的层关系图中显示可识别的体系结构模式。例如,描述桌面应用程序的层关系图可能包括演示、域逻辑和数据存储区等层。介绍应用程序中单个功能的层关系图可能包括模型、视图和控制器等层。有关此类模式的更多信息,请参见 Patterns & Practices: Application Architecture。
如果您需要频繁地创建类似模式,请创建一个自定义工具。请参见 如何:定义自定义建模工具箱项。
为每个层创建代码项目,例如命名空间、类或组件。这样,您将能更轻松地理解代码并将代码项目链接到层。创建每个项目后,将其链接到相应的层。
您不必将大多数类和其他项目链接到层,因为它们归属于您已链接到层的较大的项目,如命名空间。
为新功能创建新关系图。通常,需要使用一个或多个层关系图来描述整个应用程序。如果您正在设计应用程序中的新功能,则不要对现有关系图进行增补或更改,可以创建您自己的反映新的代码部分的关系图。新关系图中的层可能包括针对新功能的演示、域逻辑和数据库层。
构建应用程序时,系统将基于整体关系图和您的更详细的功能关系图对您的代码进行验证。
编辑演示和讨论的布局
若要帮助标识层和依赖关系或与团队成员讨论这些层和依赖关系,请通过以下方式编辑关系图的外观和布局:
更改层的大小、形状和位置。
更改层和依赖项的颜色。
- 选择一个或多个层或依赖项,右击,再单击**“属性”。在“属性”窗口中,编辑“颜色”**属性。
关系图验证代码
在编辑关系图时,可以手动验证其代码在 + 任何 + 时间也可以在每次自动运行本地生成或 Team Foundation Build。
请参见:
在生成过程中包括层验证
更新代码以符合新结构
通常,在您第一次对照更新后的层关系图验证代码时,将出现错误。这些错误的原因可能有以下几种:
将项目指派给了错误的层。在这种情况下,请移动项目。
项目(例如类)以与您的体系结构相冲突的方式使用了其他类。在这种情况下,请重构代码以移除依赖关系。
若要解决这些错误,请更新代码,直至验证过程中不出现其他错误为止。这通常是一个反复的过程。有关这些错误的更多信息,请参见用层关系图验证代码。
说明 |
---|
在您开发或重构代码时,可能需要将新项目链接到层关系图。但此操作可能并非必要的,例如,当您具有的层表示现有命名空间,而新代码只是向这些命名空间中添加更多材料时。 |
在开发过程中,您可能需要在验证期间禁止显示报告的某些冲突。例如,您可能希望禁止显示您已解决或与特定情形不相关的错误。禁止显示错误时,最好在 Team Foundation 中记录工作项。若要执行此任务,请参见 用层关系图验证代码。
在生成过程中包括层验证
为确保代码中将来的更改与层关系图相符,请在解决方案的标准生成过程中包括层验证。这样一来,只要其他团队成员生成解决方案,系统就会将代码和层关系图中依赖项之间的差异作为生成错误进行报告。有关包括层验证的更多信息在生成过程,请参见 用层关系图验证代码。