VS2010中使用Modeling Project定制DSL以及自动化代码生成

本文介绍了如何在Visual Studio 2010中使用Modeling Project自定义UML Model的Profile,创建DSL,并通过T4和CodeDom进行自动化代码生成。通过定制Profile和应用stereotype,开发者可以为Apworks框架创建图形化设计器,并根据模型自动生成C#代码,提高开发效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从Visual Studio 2010开始,有一个Modeling Project的项目模板,允许应用程序设计人员通过该项目完成统一的UML模型设计。与Visual Studio 2008 DSLTools相比,通过Modeling Project创建出来的UML模型对象,能够被使用到各个不同的UML视图中,这一功能是由UML Model Explorer维护的。我们可以看到,相同的UML模型对象,可以同时在Class Diagram以及Sequence Diagram中引用。从Visual Studio 2010开始,基于Visual Studio 2010 SDK的Visual Studio Visualization & Modeling SDK允许开发人员通过Domain Specific Language(DSL) Designer来设计开发自己的DSL,不过本文不会从Visualization & Modeling SDK着手来创建一个新的DSL,而是通过已有的Modeling Project来实现DSL的定制。

谈起DSL,或许有些朋友还不太了解。其实DSL就是一种应用于特定场景的语言,比如Entity Framework,它有一个Designer Surface,也就是我们平时所说的设计器,我们可以在设计器上设计各种类型以及类之间的关系,而整个设计器是面向Entity Framework这个特定应用场景的,例如我们可以在类的图形上设置这个类需要映射到数据库的哪张表,还可以在类的某个属性上标注它可以被映射到表里的哪个字段等等;相比之下,用于设计企业组织结构的设计器,就不会出现数据库、数据表、字段等这些概念,因为这些内容与企业组织结构扯不上什么关系。在Apworks框架开发的过程中,我意识到一个问题,就是能否通过使用Microsoft Visual Studio的功能,来图形化地设计我们的Domain Model,然后根据Domain Model来产生所需的C#/VB.NET代码。这样一来基于Apworks框架开发的Domain Model就可以根据图形化设计来自动生成代码。

通过本文的学习,你将了解到,如何使用Visual Studio 2010的Modeling Project来为自己的开发框架定制图形化的设计器并自动产生代码。在本文中,我将以Apworks为例,向大家介绍DSL的定制与代码自动化生成的过程。在开始学习以前,请确保你的电脑安装了Visual Studio 2010、Visual Studio 2010 SDK以及Visual Studio 2010 Visualization & Modeling SDK。

自定义UML Model的Profile以及stereotype

在图形元素上应用stereotype,就使得该元素能够表述一种特定的语义。例如,在一个图形元素上应用<<table>>这个stereotype,那么就可以认为该元素是一张数据表。在Visual Studio 2010 Modeling Project中,stereotype是在UML Model的Profile中定义的,而Profile最终会被应用在UML Model上。一个UML Model允许应用多个Profile。Visual Studio 2010 Modeling Project默认自带三种Profile:C# Profile、Standard Profile L2以及Standard Profile L3,如下图所示:

image

如果你需要使用VS2010 Visualization & Modeling Feature Pack提供的Generate Code命令来产生C#代码,那么你就需要在UML Model Explorer上对选中的Model采用C# Profile,并在表示“类”的图形上应用C# class这个stereotype。

现在,让我们考虑一下,基于Apworks框架的Domain Model,会有哪些种类的元素出现,比如,一个类可能会是一个聚合根,或者会是一个实体,或者会是一个领域事件;而类中的方法,可以是领域事件的处理过程。为了让Modeling Project能够支持针对Apworks框架的建模功能,我们需要新建一个Profile,并在Profile里定义一些必须的stereotype:Aggregate Root、Entity、Domain Event以及Domain Event Handler。Profile的新建非常简单,它本身就是一个扩展名为.Profile的XML文件,在此,我们可以为Apworks创建如下的Profile文件:

<?xml version="1.0" encoding="utf-8"?>
<profile xmlns="http://schemas.microsoft.com/UML2.1.2/ProfileDefinition" 
         dslVersion="1.0.0.0"
         name="ApworksDomainModelProfile"
         displayName="Apworks Domain Model Profile">
  <stereotypes>
    <stereotype name="entity" displayName="Entity">
      <metaclasses>
        <metaclassMoniker name="/ApworksDomainModelProfile/Microsoft.VisualStudio.Uml.Classes.IClass"/>
      </metaclasses>
    </stereotype>
    <stereotype name="sourcedAggregateRoot" displayName="Sourced Aggregate Root">
      <metaclasses>
        <metaclassMoniker name="/ApworksDomainModelProfile/Microsoft.VisualStudio.Uml.Classes.IClass"/>
      </metac
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值