首页>参考读物>计算机科学与技术>软件与程序设计

Visual Studio DSL工具特定领域开发指南
作者 : Steve Cook; Gareth Jones; Stuart Kent Alan Cameron Wills
译者 : Visual Studio架构师套件开发团队
出版日期 : 2008-06-30
ISBN : 7-111-24133-1
定价 : 56.00元
扩展资源下载
扩展信息
语种 : 简体中文
页数 : 384
开本 : 16开
原书名 : Domain-Specific Development with Visual Studio DSL Tools
原出版社:
属性分类: 店面
包含CD :
绝版 : 未绝版
图书简介

作为一种为某些特定(横向或纵向)领域而定制的语言,特定领域语言(DSL)正在软件工程师和架构师之间孕育一个不断增长的兴奋因子。DSL给软件的创建和演化带来了新的敏捷性。与标准的程序代码相比,DSL使得设计考虑的不同方面都能够以更加贴近系统需求的形式表示出来,从而极大地减少大规模项目和生产线的开发成本。在这本具有突破性的著作中,4名杰出的专家向读者介绍了DSL的使用方式,以及在您的环境中怎样最好地利用它们。
  通过阅读本书,首先您可以掌握可应用于所有平台的DSL概念和技术。然后,您将学会怎样通过微软公司新推出的功能强大的DSL工具(这个工具集正是由本书作者所设计的)来创建和使用DSL,以及怎样定义DSL并用Visual Studio内建的建模技术来生成可视化设计器。

本书深入地探讨了以下内容:
  ■判断DSL是否适合您。
  ■对DSL和其他模型驱动的开发方法进行对比。
  ■DSL的定义、调优和演化:模型、界面表示、创建、更新、序列化、限制条件、验证以及其他内容。
  ■在编写很少代码、甚至不编写代码的情况下,为新定义的DSL生成可视化设计器。
  ■利用简单的文本模板,为您的模型生成应用程序代码,极大地提高生产效率。
  ■自动生成配置文件、资源和其他工件。
  ■快速简单地在不同组织中部署可视化设计器。
  ■为特定的过程需求定制可视化设计器。

图书特色

图书前言

本书是微软特定领域语言(Domain-Specific Languages,DSL)工具的软件开发人员指南。此工具包含在微软Visual Studio 2005 SDK(Software Development Kit)中。
  软件行业正在兴起使用特定领域语言方法的大浪潮,此方法能够降低软件开发的成本,尤其体现在大型项目中。特定领域语言(DSL)是一种用于某个特定的兴趣领域中的语言,如垂直领域(比如电话设计),或横向领域(比如工作流)。它可以是一种程序语言、一种规范或一种设计语言。它可以是文本语言、图形语言或者两者的混合。这种语言由某一特定领域中的术语来描述,例如“连接”、“铃声”或“工作项目”,根据这些概念如何被实现的细节进行加工整理。软件、配置文件、资源以及其他文档都能由这种语言生成出来—通常大多数工件由一个DSL生成—或者这种语言直接翻译出来。这便于我们在需求层讨论软件,使进行更改的过程变得非常敏捷。在垂直领域,业务人员可以借助特定领域语言进行需求方面的讨论。
  DSL并不是全新的概念—HTML和SQL都是众所周知的DSL例子。然而,为个人项目创建个人DSL的想法却不普遍。微软DSL工具的目标是在项目开始前就设法降低成本。你可以快速开发一组图形语言,例如工作流图、类图或实体图,然后从这些图生成工件。
  目标和范围
  如果你是一名软件开发人员或架构师,正在使用或正准备使用微软的DSL工具,那么本书正是为你而写。本书解释了如何创建及使用语言,如何定制语言以适应你的需求以及如何根据你的项目情况进行选用。对于更广泛的特定领域语言的常规主题感兴趣的人们或希望比较和对比模型驱动开发的方法及工具的人们,本书都提供重要的价值。第1章和第11章讨论了关于特定领域语言较为广泛的话题以及你如何设计特定领域语言。中间的章节详细而易读,集中讨论使用DSL工具来构建DSL以及代码生成器的各种细节。
  本书的作者是Microsoft DSL工具的主要设计者从开始就立足于这项产品,并对大部分关键设计定义负责。
  为什么要使用DSL工具
  如果你(或你的组织)正在重复编写着相同或相似的代码,无论是在一个大型项目中或在不同的多个项目里,那么这些代码有可能是自动生成的。如果是这样,你可以考虑使用 DSL 工具作为生成这些代码的一种方式。尤其在代码是从领域专家(而非软件开发专家)能够很容易理解的结构中生成的情况下更需如此。阅读本书后,你将能够直接或经过专用化定制后使用DSL工具的各种功能来对付这类问题。
  本书的结构
  ·第1章解释DSL方法,将它与类似的技术进行比较,并介绍使用DSL的典型用户场景。
  ·第2章探讨DSL工具系统的各个部分,展示这些部分如何在一起工作,并介绍在其余章节所使用到的主要示例。
  ·第3章详细介绍如何定义语言的概念。
  ·第4章讲述如何定义你的语言的可视化外观。
  ·第5章介绍语言行为的几个重要方面。
  ·第6章介绍语言中的模型和图像在文件中如何表示。
  ·第7章介绍如何确保你的语言用户创建正确的声明。
  ·第8章介绍如何通过创建配置文件、程序代码、资源以及其他工件的方法来使用你的语言驱动或配置你的系统。
  ·第9章讲述如何创建一个安装程序把你完成的语言安装在多台计算机上。
  ·第10章介绍如何在标准定义提供的功能之外,为你的语言添加特殊的功能(或编辑器的特殊行为)。
  ·第11章介绍一组基于规则和过程的轻便的工具包,可适用于你的项目中语言的开发或发展。
  更新及所有的主要示例都可在网站下载:  ·www.domainspecificdevelopment.com。
  使用本书你还需要什么
  若要完整地获取本书的价值,你需要相当熟悉Visual Studio提供给开发人员的代码工具,包括代码编辑器和 XML 编辑器。你还需要掌握C#编程语言的基本知识以及.NET类库的主要类知识,以便理解书中的编程示例。
  DSL工具作为Visual Studio SDK的一部分可供下载并在Visual Studio专业版及更高版本上使用。使用DSL创建的工具可以部署在Visual Studio标准版及更高版本上。通过网站http://msdn.microsoft.com/vstudio/DSLTools/你可以找到DSL工具的入门知识,还能找到SDK的下载地址、很受欢迎的DSL工具论坛、本书作者与其他人讨论DSL工具的博客、报告bug或提建议的工具、白皮书、聊天室以及其他资源。
  致谢
  作者想要表达对以下所有人的感谢,他们对DSL工具的设计、开发、文档编制及测试工作做出了相当大的贡献:
  Annie Andrews、Steve Antoch、Austin Avrashow、Bhavin Badheka、Andy Bliven、Anthony Bloesch、Scott Chamberlin、Frank Fan、Jack Greenfield、Howie Hilliker、Ashish Kaila、Jesse Lim、George Mathew、Niall McDonnell、Blair McGlashan、Grayson Myers、Kirill Osenkov、Duncan Pocklington、Anatoly Ponomarev、Jochen Seemann、Keith Short、Pedro Silva、Patrick Tseng、Steven Tung、Dmitriy Vasyura和Yu Xiao。
  我们还要感谢我们所有的早期用户群,包括那些DSL工具论坛的参与者,他们与我们共同经历了数次DSL技术的预览版。在DSL工具开发直至完成的过程中,这些早期用户的反馈提供了无法估量的有用价值。
  下面的审阅者在本书的内容上给予了我们宝贵的详细反馈,使本书在很多方面得到了改进:
Victor Garcia Aprea、Edward Bakker、Dan Cazzulino、Patrick Cooney、Dragos Manolescu、Jean-Marc Prieur、Jezz Santos、Gerben van Loon和Markus V歭ter。
  感谢Addison-Wesley的Joan Murray和她的工作组在我们的写作过程中始终给予我们耐心的精神支持。
  我们还想特别感谢Bonnie Granat,她在文字推敲方面的精准和敏锐反应帮助我们提高了文字表达的准确性。
最后,我们要感谢我们的合作伙伴和家庭成员,谢谢他们容忍我们将夜晚和周末的时间花在这本书上,而没能陪伴他们。

封底文字

作为一种为某些特定(横向或纵向)领域而定制的语言,特定领域语言(DSL)正在软件工程师和架构师之间孕育一个不断增长的兴奋因子。DSL给软件的创建和演化带来了新的敏捷性。与标准的程序代码相比,DSL使得设计考虑的不同方面都能够以更加贴近系统需求的形式表示出来,从而极大地减少大规模项目和生产线的开发成本。在这本具有突破性的著作中,4名杰出的专家向读者介绍了DSL的使用方式,以及在您的环境中怎样最好地利用它们。 通过阅读本书,首先您可以掌握可应用于所有平台的DSL概念和技术。然后,您将学会怎样通过微软公司新推出的功能强大的DSL工具(这个工具集正是由本书作者所设计的)来创建和使用DSL,以及怎样定义DSL并用Visual Studio内建的建模技术来生成可视化设计器。 本书深入地探讨了以下内容: ■判断DSL是否适合您。 ■对DSL和其他模型驱动的开发方法进行对比。 ■DSL的定义、调优和演化:模型、界面表示、创建、更新、序列化、限制条件、验证以及其他内容。 ■在编写很少代码、甚至不编写代码的情况下,为新定义的DSL生成可视化设计器。 ■利用简单的文本模板,为您的模型生成应用程序代码,极大地提高生产效率。 ■自动生成配置文件、资源和其他工件。 ■快速简单地在不同组织中部署可视化设计器。 ■为特定的过程需求定制可视化设计器。

图书序言

Ludwig Wittgenstein曾将一种语言比作一个城市。城市如果历史悠久,其中会有历史中心包含弯弯曲曲的小巷,市中心往往是宽阔的林荫大道和建筑风格多样的花园,城市的边缘是呈几何形状规划的郊区。他当然是在说我们所谓的“自然”语言,但这个类比同样适用于计算机语言。计算机语言中的低级语言是历史中心,而箱式建模技术则是位于郊区的斯大林式公寓街区。
  正是处于中间的宽阔林荫大道和风格多样的花园打破了大多数计算机语言的传统。我们来看一下城市的格局,这里有街道布局、交通路线、区域映射、建筑规格以及景观映射;在建筑内部,则有结构、管道、电力、电信、通风以及安全等各种规划;在工厂里,有更为专业化的流程、流体、机器和自动化模式。这些是真实世界里领域专用语言的一些例子。每种语言都有一套严格的语义定义以及一个已经在实践中建立起来的主体。每一种语言的建立都是由于之前的系统已无法胜任现有的任务。
  当然,目前大家都使用计算机来绘制所有这些东西。在每种情况下,都有一些富有进取心的供应商(或者有时是用户)已经为该领域创建了实现特定的建模任务的程序包。但这些应用程序局限于该领域,因此维护基础结构的成本相当高。
  同时,在计算机系统的世界里,最频繁使用的设计工具是白板,而且有将白板上的草稿内容最终转换成代码的处理工具(通常是手动和高度默认的)。理想情况下,从白板上的概念到精确的代码转换过程应该是一个顺畅的渐进过程。
  遗憾的是,今天的转换并不那么顺畅。无论开发人员使用的是通用的建模语言,如UML(在少数情况下),还是白板笔或者3GL,人类可读的语言世界与计算机可执行的软件世界之间总是存在突变。微软DSL工具的目的就在于缩小两者之间的差距。
  如果能够方便地使用问题领域的语言来绘制设计草稿,就像在白板上画出设计一样,然后逐渐对这个草稿添加注释,直到这个设计足够丰富以致能够成为一个可执行的模型,那会怎样?这样的技术目前还不存在,然而DSL工具是此方向的一个巨大飞跃。
  DSL工具使得特定领域语言的创建更平民化。使用DSL工具创建的特定领域语言帮助领域专家使用他们所熟悉的术语来捕获高层设计,然后再将此设计转换为可以运行的软件。这是向大规模定制的方向迈出的巨大一步—其思想是将领域内一系列相关的软件解决方案的模式捕获下来,然后通过定义明确的组件将特定结果组装出来。几乎所有成功的行业都已应用此方法,但软件行业却落后了。
  当我们达到大规模定制时,软件的经济效果将从手工时代跨入由组件市场以及定义明确的重用规则组成的软件供应链的时代。作为这种转换中的关键一步,DSL工具将占有一席之地。
  再也没有人比 Steve Cook、Gareth Jones、Stuart Kent和Alan Cameron Wills更适合写这本书的人了。他们是DSL工具的始创者,拥有几十年使用及设计以往建模工具的经验,对这些知识的深度掌握以及由此所带来的激情和专业知识在此行业内是无可比拟的。他们的工作做出了巨大的贡献。

  Sam Guckenheimer
  《Software Engineering with Microsoft Visual Studio Team System》的作者
  Redmond,WA
  2007年3月

作者简介

Steve Cook; Gareth Jones; Stuart Kent Alan Cameron Wills:Steve Cook: 微软公司企业框架和工具组的一名软件架构师。在加入微软之前,他是IBM的一名杰出工程师,在推出UML 2.0规范的过程中,他是IBM公司的代表。作为英国计算机协会的一名院士,他在早期参与了面向对象编程的推广。
Gareth Jones: DSL工具项目的开发经理。自从1997年加入微软公司以来,他的经历包括了建立企业级解决方案,管理咨询团对,以及领导开发了微软(英国)公司的中小企业门户。
Stuart Kent: 于2003年加入微软公司并成为DSL工具项目的项目经理。在此之前,他在Kent大学进行对模型驱动开发的研究,并且是UML 2.0和MOF 2.0标准的重要贡献者。
Alan Cameron Wills: 在2003年加入微软公司之前的10年时间里是一名方法论咨询师。他是基于组件开发方法“催化法”的创建者之一。

译者简介

Visual Studio架构师套件开发团队:暂无简介

译者序

Visual Studio DSL(Domain-Specific Language,特定领域语言)工具,是微软公司针对特定领域开发而专门设计的。本书的作者同时也是DSL工具设计、开发和测试团队的核心成员,他们都在微软和业界工作多年,具有相当丰富的模型驱动开发、特定领域开发和软件工程等方面的知识以及工程经验。本书从他们的视角出发,带领广大读者认识并实际体验DSL工具在软件开发中所涉及的各个方面,无论是对该工具把握的深度还是广度上都是最权威的。
  目前,本书是第一本专门介绍DSL工具的软件开发书籍。译者仅在一本介绍Visual Studio 2005 Team System的书中见到过一章对早期版本的DSL工具的介绍。本书不仅介绍了特定领域开发、模型驱动开发等概念,更注重理论与实例相结合,用一个具体DSL应用实例贯穿全书,详细介绍了如何使用DSL工具来开发用户自己的特定领域语言,从而实现真正的用模型来驱动软件的开发。本书图文并茂,并给出了部分关键的代码,以方便广大读者的阅读。
  DSL工具作为Visual Studio SDK的一部分发布(DSL工具的最早版本是随着Visual Studio 2005 SDK发布的),SDK可以在微软的网站上免费下载。本书中的实例都是基于Visual Studio 2005以及相应的SDK进行开发和调试的。目前,最新版本的Visual Studio 2008以及相应的SDK已经正式发布,这个版本DSL工具与本书所使用的版本可能在某些方面存在细微差别,请读者留意。
  本书由陆榕统稿。前言和第5章由陆榕翻译,第1、2、7章由薛方亮和周京生翻译,第3、4章由林俊彦和陈俊朴翻译,第6、8、9章由张昕毅和陈肯翻译,第10、11章由陈国栋和林裕科翻译。
  作为微软公司Visual Studio架构师套件开发团队的成员,我们非常高兴有机会将此书翻译成中文与大家分享。翻译的过程虽然辛苦,但我们得到了来自各方面的大力帮助和支持。在此,我们想感谢所有给予我们许多关心的人们。
  感谢我们的经理们:微软中国服务器及开发工具事业部总监Terry Leeper,微软中国Visual Studio架构师套件团队资深开发主管Ramesh Rajagopal对我们翻译工作的大力支持。
  感谢原书作者,我们的同事们:Steve Cook、Gareth Jones、Stuart Kent和Alan Cameron Wills,对我们的翻译工作的支持与帮助。
感谢机械工业出版社华章分社的编辑在翻译过程中给予我们的耐心指点。
感谢所有关心我们的翻译工作,并始终给予我们信任与鼓励的家人和朋友们。
本书的翻译力求忠实于原著,翻译的过程也是译者在工程应用中不断实践和学习的过程,由于时间仓促,以及译者水平有限,翻译的错误和不妥之处在所难免,欢迎广大读者批评指正。

  Visual Studio架构师套件开发团队

图书目录

译者序

前言
作者简介
第1章  特定领域的开发 1
1.1  简介 1
1.2  特定领域开发 1
1.3  举例 3
1.3.1  软件定义电路 7
1.3.2  嵌入式系统 7
1.3.3  设备界面 7
1.3.4  软件开发过程定制 8
1.4  优点 8
1.5  语言 9
1.6  文本DSL 11
1.7  图形DSL 15
1.7.1  表示结构的规范 16
1.7.2  表示行为的规范 17
1.8  图形DSL的相关内容 18
1.8.1  符号 18
1.8.2  域模型 18
1.8.3  生成 19
1.8.4  序列化 19
1.8.5  工具集成 20
1.8.6  综合应用 20
1.9  Visual Studio中的DSL 20
1.10  定制化陷阱 24
1.11  UML 26
1.12  小结 30
第2章  创建和使用DSL 31
2.1  简介 31
2.2  过程:DSL的递增开发 31
2.2.1  通用化应用程序:定位变化
部分,发现DSL 31
2.2.2  自顶向下和自底向上 35
2.2.3  开发DSL:从草图到域模型 36
2.2.4  域模型和表示是分离的 37
2.2.5  改善DSL 38
2.2.6  由DSL驱动框架 38
2.2.7  使用DSL 40
2.2.8  DSL的发展 42
2.2.9  解析式框架 42
2.3  在Visual Studio中创建DSL 42
2.3.1  在Visual Studio中创建一个
DSL authoring解决方案 43
2.3.2  尝试使用DSL解决方案 46
2.3.3  定义DSL 48
2.3.4  生成设计器代码 49
2.3.5  向DSL中添加内容 50
2.3.6  约束 52
2.3.7  定制DSL资源管理器窗口 53
2.3.8  定制属性窗口 54
2.3.9  设计器自定义代码 56
2.3.10  DSL文件的序列化格式 56
2.3.11  由DSL驱动的应用程序 57
2.3.12  部署 58
2.4  第二个DSL例子:工程定义DSL 59
2.5  DSL工具的架构 60
2.5.1  生成的代码 60
2.5.2  DSL工具的架构分层 60
2.5.3  框架程序集 61
2.5.4  DSL项目的内容 62
2.5.5  DslPackage项目的内容 64
2.6  小结 65
第3章  域模型定义 66
3.1  简介 66
3.2  域模型设计器 66
3.3  驻留内存中的 Store 68
3.4  域类 69
3.5  域关系 74
3.5.1  嵌入关系 76
3.5.2  重数 78
3.5.3  引用关系 79
3.5.4  关系的派生 80
3.6  生成不包含任何形状的设计器 82
3.7  生成的代码 82
3.8  更多关于域类的讨论 87
3.9  更多关于域属性的讨论 89
3.9.1  自动计算的属性 91
3.9.2  DomainPropertyInfo 91
3.10  更多关于域关系和角色的讨论 92
3.10.1  访问链接 93
3.10.2  更多关于关系派生的讨论 95
3.10.3  DomainRelationshipInfo和DomainRoleInfo 97
3.11  更多关于Store的话题 97
3.11.1  查找元素 97
3.11.2  分区(Partitions) 98
3.11.3  规则 98
3.11.4  DomainModelInfo 98
3.12  小结 99
第4章  界面表示 100
4.1  简介 100
4.2  图形符号概述 100
4.3  图和编辑器 103
4.3.1  图表 103
4.3.2  编辑器 105
4.3.3  设计器 106
4.3.4  自定义编辑器 106
4.4  形状 110
4.4.1  形状分类 110
4.4.2  形状映射 116
4.5  连接器 122
4.5.1  连接器解析和外观 123
4.5.2  连接器和继承 124
4.5.3  连接器映射 124
4.5.4  高级连接器映射 125
4.6  装饰器 125
4.6.1  装饰器的类型 125
4.6.2  定位 127
4.6.3  装饰器映射 127
4.7  在代码中自定义图形符号 129
4.7.1  多行文本装饰器 129
4.7.2  图像形状变量 130
4.7.3  设置背景图片 132
4.7.4  设置自定义连接点 133
4.7.5  更改连接器的路线样式 135
4.8  浏览器 136
4.8.1  默认外观 136
4.8.2  更改窗口图标和标签 138
4.8.3  自定义的节点外观 139
4.8.4  隐藏节点 142
4.8.5  通过代码自定义浏览器 143
4.9  属性窗口 143
4.9.1  默认的属性窗口外观 143
4.9.2  类别、名称和说明 144
4.9.3  隐藏属性和使属性只读 145
4.9.4  属性的传递 145
4.9.5  通过代码自定义属性窗口 146
4.10  小结 147
第5章  创建、删除和更新行为 148
5.1  简介 148
5.2  元素的创建 148
5.2.1  工具箱 148
5.2.2  元素合并指令 150
5.2.3  自定义元素合并指令 157
5.2.4  Re-Parenting 与元素合并指令 160
5.2.5  自定义元素工具原型 160
5.3  连接构造器 164
5.3.1  多个源角色和目标角色的指令 165
5.3.2  多链接的连接指令 166
5.3.3  自定义连接构造器 169
5.4  元素的删除 174
5.4.1  默认的删除传播规则 174
5.4.2  控制删除传播 175
5.4.3  自定义删除传播 176
5.5  小结 178
第6章  序列化 180
6.1  简介 180
6.2  保存和加载模型和图表 180
6.3  模型的XML文件格式 181
6.4  元素和属性 183
6.5  关系 184
6.6  交叉引用 186
6.6.1  使用Guid作为引用 187
6.6.2  使用qualified name作为引用 188
6.6.3  对链接引用 189
6.7  图表的XML文件格式 191
6.8  版本控制和迁移 194
6.9  XML模式文件 195
6.10  自定义序列化 196
6.10.1  修改XML元素名称 197
6.10.2  Element Data 199
6.10.3  实现你自己的序列化器 201
6.11  生成的序列化代码 201
6.11.1  自定义的序列化代码 207
6.11.2  自定义对模式文件的影响 208
6.12  小结 209
第7章  约束与验证 210
7.1  简介 210
7.2  选择硬约束还是软约束 211
7.3  DSL工具中的软约束 213
7.3.1  验证方法 214
7.3.2  启用验证 216
7.3.3  触发验证 219
7.3.4  定制验证类别 220
7.3.5  验证行为的继承 223
7.3.6  验证输出 223
7.3.7  在Visual Studio IDE之外使用验证 224
7.3.8  针对外部数据的验证 224
7.4  DSL工具中的硬约束 225
7.5  规则 226
7.6  硬、软约束相结合 229
7.7  小结 236
第8章  生成工件
8.1  简介 237
8.2  工件生成方式 238
8.2.1  扩展样式表转换语言(XSLT) 238
8.2.2  使用特定领域API 241
8.2.3  一种基于模板的方法 245
8.3  复杂关系和同步 246
8.4  模板化过程 248
8.4.1  第一个模板 250
8.4.2  与生成代码相关的模型数据 260
8.4.3  开始创建模板库 262
8.5  文本模板的语法 263
8.5.1  指令 263
8.5.2  自定义指令 265
8.5.3  控制块的类型 267
8.6  实际应用中的大规模工件生成问题 269
8.7  高级自定义功能 270
8.7.1  文本模板的架构 270
8.7.2  自定义宿主 272
8.7.3  自定义指令处理器 274
8.7.4  自定义业务流程 276
8.8  小结 282
第9章  部署DSL 283
9.1  简介 283
9.2  安装一个设计器所需要的文件 283
9.3  创建一个安装项目 285
9.4  安装项目内容 288
9.5  自定义安装程序 288
9.5.1  自定义InstallerDefinition.dslsetup 288
9.5.2  自定义settings.ini 289
9.5.3  自定义Strings.wxl 289
9.5.4  自定义Product.ico 289
9.6  .dslsetup文件的格式 290
9.6.1  dslPackage 291
9.6.2  licenseAgreement 292
9.6.3  supportingFiles 292
9.6.4  vsItemTemplates 293
9.6.5  dslSchemas 293
9.6.6  vsProjectTemplates 293
9.6.7  mergeModules 294
9.6.8  textTemplates 294
9.7  更新安装文件 295
9.8  包加载键 296
9.9  为生成代码部署文本模板 298
9.9.1  在Debugging项目中创建项目模板 298
9.9.2  使用文本模板包含文件 299
9.9.3  在VS项模板中包含文本模板 300
9.10  小结 302
第10章  DSL高级定制功能
10.1  简介 303
10.2  定制工具 303
10.2.1  部分类 303
10.2.2  双重派生—The Generation Gap 303
10.2.3  自定义构造函数 305
10.2.4  自定义开关 305
10.2.5  自定义重载 305
10.3  对更改的响应 306
10.3.1  属性值变化处理“On Value
Changed/Changing” 306
10.3.2  计算域属性 308
10.3.3  自定义存储域属性 309
10.3.4  值变化通知 310
10.3.5  把模型更改传递给形状:On AssociatedPropertyChanged 311
10.3.6  规则 314
10.3.7  Store事件 318
10.3.8  .NET事件处理程序 320
10.3.9  事件重载 321
10.3.10  边界规则 321
10.3.11  更改传递技术和约束技术的小结 325
10.4  DSL外壳程序体系架构 326
10.5  如何增加菜单命令 328
10.5.1  为每个命令增加一个命令标识 329
10.5.2  增量菜单资源索引 329
10.5.3  添加命令到命令集 330
10.5.4  定义命令处理程序 331
10.5.5  命令处理程序的较好实现 333
10.5.6  编译运行 333
10.5.7  为标准的命令提供处理器 333
10.6  在另一个界面中构建DSL图 334
10.7  实现复制粘贴 335
10.7.1  复制方法 336
10.7.2  粘贴方法 337
10.7.3  注册菜单处理程序 338
10.8  形状容器 340
10.8.1  子形状 340
10.8.2  使用内嵌子形状的DSL 341
10.8.3  使用规则实现形状包含 344
10.9  小结 350
第11章  设计DSL 352
11.1  简介 352
11.2  识别可变性 353
11.2.1  自底向上还是自顶向下 353
11.2.2  特征树 354
11.2.3  特征树与DSL 355
11.3  开发域模型 355
11.3.1  拟订域快照 356
11.3.2  从快照中获得的域模型 358
11.4  开发标记法 362
11.4.1  项目定义标记法 363
11.4.2  问题状态标记法 364
11.4.3  常见的标记法 367
11.5  定义验证约束 367
11.5.1  内部一致性 368
11.5.2  外部数据及模型的一致性 369
11.6  开发和演化框架 370
11.6.1  比较生成型和解释型 370
11.6.2  演化一个通用框架 372
11.6.3  从DSL驱动生成框架 373
11.7  测试 374
11.7.1  验证约束 375
11.7.2  生成器模板 376
11.7.3  生成的代码 376
11.7.4  规则 377
11.7.5  语言定义 377
11.8  改进DSL 377
11.9  什么是一个好的DSL 378
11.9.1  适当的标记法:正则表达式的一个例子 379
11.9.2  候选的标记法 380
11.9.3  图不是语法树 382
11.10  小结 383
11.11  总结 383

教学资源推荐
作者: 谢满德 邵俊 编著
作者: H.H.Tan,T.B.D'Orazio,S.H.Or,Marian M.Y.Choy著
作者: (美)Y.Daniel Liang 著 阿姆斯特朗亚特兰大州立大学
参考读物推荐
作者: 刘志铭 等编著
作者: 许进 叶志远 钟尊发 蔡波斯 等著