Visual studio 2010 Layer Diagram 实例教程 (转载)

原文出處:http://michaelchpeng.spaces.live.com/blog/cns!37633C3B61B57B57!1112.entry   http://msdn.microsoft.com/zh-tw/ee702411.aspx

 

当我们在做架构设计时,一开始最常碰到的就是决定系统的分层状况,像是三层式体系结构中的用户接口、商业规则和数据存取。而就开发的角度来看,理应是用户接口只能透过商业规则层去存取数据层。不过在实际开发时,我们不经意的绕道而行是常见的事。如何让开发出来的东西真的能遵循我们原本设计的架构,不致产生违背设计 (以致后续难以维护) 的情况,是个大挑战。Visual Studio Team System 2010 Layer Diagram 让架构设计和开发成果之间的验证简单许多,这里就用一个简单的例子看看。我使用的是 Beta 2 的版本。

想法是这样,我们要设计一个应用程序,基本的要求是所有的通讯作业都要透过定义的接口进行,不能让应用程序直接呼叫实作了该接口的类别或方法 (有点 WCF 的感觉)。我们可以透过 Layer Diagram 来表达这个架构上的想法。我启动了 VSTS 2010,试着建立一个新项目,我们可以看到在左边的模板类型中有一个 Modeling Projects 节点,选择右方的 Modeling Project 模板,我们指定解决方案的名称为 LayerValidation,并提供项目的名称为 SimpleModel

 


建立塑模项目

接着我们在 SimpkeModel 项目中加入新的项目,可以看到在新增项目的对话框中提供了七种模板 ( Beta 2 中新增加了一个 Directed Graph Document 模板),选择 Layer Diagram,同时命名为 FundamentalLayer

 


塑模用的范本

Layer Diagram Designer 中,我们从工具箱中拖放出三个 Layer 工具到设计平面上,分别由上至下指定层的名称为 ClientInterfaceImplementation,代表我们的应用程序、作业接口和实作方法。接着我们要建立各个层次之间的相依关系。按照我们的设计,从工具箱点选 Dependency 工具,然后从 Client 层拖放到 Interface 层,代表 Client 层会依赖 Interface 层。这时出现一个由 Client 指向 Interface 的箭头联机。以同样的方式建立 Implementation 层依赖 Interface 层的连结,如下图所示:


Layer Diagram

这是我们要求的架构,接着我们可以在解决方案中再加入四个方案,第一个方案是一个 Console Application 项目,名称为 Client。至于其他三个项目则都是 Class Library 项目,名称分别是 InterfaceImplementationCreator。我这里用的例子是 VB,架构是和语言无关的,所以同样的功能也适用在 C# 上。

我这里要建立的是一个简单的例子,我们要定义一个标准的讯息接口做为数据定义,以及一个方法接口用以传回讯息。所以我打开 Interface 接口项目,将原本默认的 Class1 改成 IMessageReceiver,原本预设的宣告是 Class,当我改成 Interface 时,就会出现宣告是 Interface,但结尾是 Class 的情况。于是 2010 除了如过往透过破折线标示文法错误之外,同时也透过 Smart Tag 提供修正的选项。把鼠标停在破折线标示区,就会出现 Smart Tag,然后我可以选择 Insert the missing "End Interface" 的命令。点选之后就会自动补上正确的结尾叙述,我们再把多余的 End Class 删除就可以。


Smart Tag

IMessageReceiver 界面中,我们要定义一个仅读的 Message 属性,它的型别也是一个接口 IMessage。所以我们输入以下的叙述:

ReadOnly Property Message As IMessage
很显然的,IMessage 是一个我们还未定义的讯息接口,所以下方会出现警告的破折号。如果我们检视一下对应的 Smart Tag,会发现其中有几个命令,有一个是 Generate "Interface IMessage" (如果是 C#,可能是不一样的命令,可以选择Generate new type 命令透过对话盒指定要产生的是新接口)。我们只要选择这个命令,就会自动产生另一个档案并宣告这个接口。这个新功能可以让我们不用先定义新方法或型别,以更直觉更快速的方式建立正确的宣告。

 

好了,接口定义完毕,接着要建立实做的方法了。展开 Implementation 项目,加入对 Interface 的参考,因为我们要实做支持 IMessageReceiver 接口的类别。将预设的 Class1 类别改名称为 MessageReceiver,然后加上实做的叙述:

Implements IMessageReceiver
由于我们并未汇入 Interface 命名空间,所以上述的宣告中 IMessageReceiver 的部份会被标示错误。同样透过 Smart Tag,看到了几个选项,一个是汇入正确的命名空间,一个是采用全称来宣告型别。赞别,现在写程序也可以像在 Microsoft Word 里面写文章一样利用 Smart Tag 进行修正。我选择了 Import Interface 命令 ( C# 中就是 using Interface ),就自动在档案开发加上汇入的宣告。这个功能真的太酷了!

 

 

由于我们还要实做对应的接口属性 Message,目前的情况是还没有实做,所以设计师还是会提示错误。我在 Implements IMesasgeReceiver 后方敲下 Enter,让系统自动帮我们建立一个实做的宣告 (如果是 C# 可能要透过 Smart Tag 产生),并且指定 NotImplementException,因为我们只是个例子,并没有真正的传回逻辑。到这里,算是实做的部份完成。


实做部份

有了接口,有了实做的类别,接着就可以建立主程序了。我展开 Client 项目,加入对 Interface Implementation 的参考。然后在主程序中加入以下的叙述 (当然要记得汇入必要的命名空间)

 

所以我们会透过 MessageReceiver 类别传回 Message 属性的值做为要处理的讯息。完成了这个简单的例子之后,我们就要把实做的成果和要求的模型结合在一起,看看我们的设计是否吻合架构面的要求。要把实做的项目和 Layer Diagram 中定义的层次相结合,方法很简单。回到 FundamentalLayer 层次图,然后从 solution explorer 中拖放 Client 项目节点到层次图的 Client 层次上。此时会看到层次图形的左上方出现个 1,代表它已经和一个项目绑定了。同样的方式,把 Interface 项目对映到 Interface 层次,Implementation 项目对映到 Implementation 层次。如果你选择其中一个已经绑定的层次,可以在 Layer Explorer (如果看不到可以从 Architecre 选单的 Window 命令中找到 Layer Explorer 把窗口调出来) 看到所绑定对象的细节。

有了项目和层次的对映后,接下来就有趣了。我们可以用鼠标右键点选层次图的表面,会看到快速选单中有一个 Validate Architecture 命令,我们执行这个命令;


进行架构验证

命令执行完成后会看到错误讯息,同时指示错误发生的区域。检视一下错误内容,会发现我们要求的层次依赖关系被破坏了,因为 Client 直接呼叫了 Implementation 的设计 (包括参照到 Implementation 项目,以及直接使用 MessageReceiver 类别:

 


验证后的错误

解决之道是利用 Factory 样式,利用 Factory 建立以接口为主的方法,隔离实做和接口的关系。所以日后要传回的讯息接收器是针对不同的讯息来源进行处理,我们只要调整 Factory 方法,传回对应的接收器,原本的应用程序不用更动,因为它都是透过接口决定作业,只要实做了同样接口的类别都可以套用,增加程序的弹性和维护能力。所以我们展开 Creator 项目,加入对 Interface Implementation 的参考,然后把 Class1 的名称改成 MessageCreator。它的程序内容如下:


MessageCreator 类别

紧接着我们移除掉Client项目中原本对 Implementation 项目的参考,然后加入对 Creator 项目的参考。并且更进一步的把原本的主程序更改为:

 

 

这样我们就不是直接透过实做的类别进行讯息的存取,而是经由 Factory 取得符合接口定义的内容。这回我们再做一个层次验证,可以看到成功通过设计。在这里用的是一个很小的例子,碰到大型的项目,还是可以透过相同的方式进行验证。确保我们的程序在架构层次面是遵循要求的。

 

 

 实例2:(请看) Visual Studio 2010 Beta2中Layer Diagram(层次图)  author :生鱼片 http://www.cnblogs.com/carysun/archive/2009/11/09/vs2010beta2-layerdiagram.html

 

 

转载于:https://www.cnblogs.com/sandman/archive/2009/11/10/1599473.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值