【51CTO精选译文】最近我参加了一个本地Visual Studio 2010启动仪式,当初去的目的主要是想看看Team Foundation Server(TFS)的新特性,但真正令我印象深刻的是新增的一些架构工具,以前我一直使用Visual Studio扩展工具NDepend,很高兴现在在Visual Studio 2010中对架构工具进行了改进,吸收了大部分NDepend的功能,请看版本对比表(http://www.microsoft.com/visualstudio/en-us/products/2010/default.mspx#compare),它仅在旗舰版中具有这个功能。
为了便于说明,我将使用一个假想的,有Web、业务和数据层,以及一些共享模型对象的应用程序作为示例,如下图所示。
图 1 假想的应用程序分层图
这里没有什么特别的,图中显示了每一层的名字,数字是代码单元的编号(在这里,你可以加入独立的命名空间或类)。为了创建一个图表,我们需先创建一个新的Visual Studio 2010建模项目,在该项目上增加新的层图,我使用设计器添加了形状和依赖线,看起来还不错,但我想让它变得更好看。
为了将模块放入某一层,你可以从解决方案资源管理器(Solution Explorer)或新的架构浏览器(Architecture Explorer)进行拖放,两种方法都可以找到你想找的对象,虽然方法不一样,但结果是一样的,当所有模块分配到正确的层中后,你可以在图表上点击右键,然后选择“验证架构(Validate Architecture)”。
Visual Studio 2010然后就会编译你的解决方案,并验证其架构,如果不出现错误,你将会看到如下的输出信息:
1/28/2010 4:04:17 PM: Architecture validation is starting.
1/28/2010 4:04:23 PM: Architecture validation succeeded (0 suppressed).
现在我们尝试添加一个非法调用,在这里,我首先在Biz项目上添加一个引用,但失败了,因为它将会产生一个循环依赖,我想这在以前的版本中一样存在,但我却从没遇到过。
增加了非法调用后,我再次验证架构,解决方案将会重新编译,这次的输出信息如下:
1/28/2010 4:19:46 PM: Architecture validation is starting.
1/28/2010 4:19:55 PM: Architecture validation failed with 3 violation(s) (0 suppressed).
OK,我们的行为正如预期的那样,点击错误列表,可以看到错误的详细信息。
图 2 错误列表
因此,不仅在数据层的代码触发事件上增加了讨厌的调用,引用本身也有,从这里的错误列表我们可以做许多事情。
在错误上点击右键,从弹出的右键菜单中选择“管理验证错误”,然后点击“抑制错误”,当然你这么做需要冒一定的风险,编译的输出信息如下:
1/28/2010 4:25:03 PM: Architecture validation is starting.
1/28/2010 4:25:09 PM: Architecture validation succeeded (3 suppressed).
如果你想立即修复错误,你可以双击错误信息获取违规代码,如果是一个正常的编译失败,你会看到一些语法错误,如果你使用TFS,可以选择“创建工作项目”基于错误信息创建一个新的TFS工作项目。
通过设置建模项目的“验证架构”参数,也可以将其包括在本地编译过程中,TFS用户也可以增加这一步,只需要在编译标签增加下面的MSBuild参数即可:
- /p:ValidateArchitecture=true
这对于团队构建特别有用,因为你可以阻止检入可能会引起架构问题的代码。
我很高兴地看到这些东西出现在VS 2010中,我不知道这些新的组件是否能达到NDepend的功能,但他们的出现也标志着Visual Studio 2010的进步,我希望这些工具能够帮助我们真正改进,形成一个更高效的团体。
在编写本文的时候,我发现最新的NDepend 3 Beta版完全集成到Visual Studio中了,我将另起一篇比较Visual Studio 2010中的DGQL查询和NDepend的CQL。
原文出处:http://blogs.lessthandot.com/index.php/Architect/DesigningSoftware/validating-architecture-with-visual-stud-2010
原文名:Validating Architecture with Visual Studio 2010
作者:AlexCuse
【编辑推荐】