快捷搜索:  as  test  1111  test aNd 8=8  test++aNd+8=8  as++aNd+8=8  as aNd 8=8

澳门威泥斯人_酒文化网进入



1 小序

这篇文章我将先容多年来我应用DSL进行软件开拓的最佳实践,在开始之前,我先概述一下内容。我专门针对自定义描述软件系统的领域特定说话,这些说话可所以文本的也可所以图形的,创建的模型再由代码天生,验证,模拟和解释应用,DSL是为开拓职员和架构职员应用的(主要包括软件系统的架构/技巧方面),同时也可以被那些平日不被称为开拓者的商业用户应用。

我明确扫除内置/嵌入式的DSL, 比如由Ruby,Cove澳门威泥斯人rge或者Lisp构建的DSL, 当然也不斟酌MPS(译注:Jetbrains开拓的,我在这里有先容)这种经由过程扩展一个图灵完整的说话构建的DSL。

这篇文章是最佳实践的一些高度概括。对付他们此中的每一个,我都可以写很多页(实际上确凿也是,已经有了很多关于这些或者其它实践的内容,见[1,2,3])。 只管内容简单,这篇文章照样会提醒你当斟酌MD*你的项目时应该斟酌的所有的工作。

关于术语的留意事变:

应用MD*作为MDD,MDSD,MDE,MDA,MIC和其它道理相同的措施名词的缩写。

模型可以经由过程很多种要领处置惩罚,可以被验证,转换,天生代码或者解释。采纳“模型处置惩罚(model processing)”(名词是模型处置惩罚器model processor)这个术语来代表所有的这些。

应用术语”元数据(metaware)”来指所有的元数据级其余物件。元数据包括DSL,元模型,编辑器,模型处置惩罚。

平日一个描述系统的周全的模型分成许多“模型单元(model units)”,我称之为分区partitions(例如XML文件)。

采纳术语”营业利用business”,来唆使所有利用领域,可所以科学,机器,自动化,金融或者保险,而不是详细的财务/管帐/司法这些营业,这个词主要用来与法度榜样员/设计师/阐发师处置惩罚的法度榜样/软件区分。

每一个最佳实践都评定了星级,数据滥觞于我在同事傍边做的一个小查询造访。到现在为止,只有10小我回覆了,以是这个查询造访不必然有代表性,然则它肯定是最佳实践的一个唆使:

我并不觉得是这样,我常常应用一种技巧与之相抵触

我没有应用过,然则它听起来有事理,我想假如当我必须要面对这样的问题的时刻我会这样来做

我成功的应用过,然则我不肯定这是通用的最佳实践

我成功的应用过很多次,我确信这是最佳做法,不用才怪呢

文章有三个主要部分:

第1部分: DSL的设计,设计你澳门威泥斯人的说话时必然要铭记的最佳实践。

第2部分: 模型处置惩罚,模型反省,解释和代码天生。

第3部分: 斟酌你必须记着的有关历程和组织方面的工作。

第4部分: 着眼于MD*天下里面临的问题和寻衅.

2设计DSL

领域特定说话的说话滥觞

若何能够掘客出你的DSL表示什么?若何来进行抽象,以及对应的符号是什么?这不是一个通俗问题,事实是这是MD*里最主要的问题,这必要大年夜量的履历和思虑以及赓续的迭代。不过也有一些范例的措施:

假如你在构建一个技巧型的DSL,说话的滥觞平日是一个已经存在的框架Framework,类库li澳门威泥斯人brary,架构architecture或者是架构模式architecture pattern,这方面的常识平日是你已经具备了的,构建DSL主如果形式化这些常识:定义表示要领,用款式化的说话表达出来,并且构建天生器天生部分实今世码,在这历程中,常常会将框架的一些功能特性当成合理的潜规则(默认规则),这能够前进框架的抽象层次,使框架更轻易应用。

假如你在构建一个营业领域DSL, 你必要网络领域专家现有的常识,在保险,科学,后勤这些领域,专家们绝对有能力很好地表达相关常识.他们不停做这方面,常常应用Excel或者Word. 他们有自己的”说话”来表达领域观点,虽然可能并不是规范的说话,并且没有对象支持。在这种环境下,你的事情便是供给这种规范款式和对象,除了领域常识,其它的器械也是可以使用的:比如硬件布局或者设备特性在个别领域也是不错的选择。

在以上两个领域,我们对DSL的期望很明确,只必要留意一些细节,表示形式,规范化,视点(ViewPoints),喜爱(这些也是很紧张的)。不过在其它的环境下我们就没有这么幸运了,假如没有现成的领域常识,我们必须去做一个领域阐发,使用已有的利用,从需求启程,介入此中。

对付你的第一个DSL,考试测验找到一两个案例,抱负的环境是从第一个案例开始,由于构建DSL和支持对象的人每每便是领域专家或者软件架构师和开拓者.

极根体现力

当构建DSL的时刻,确认你没有被诱惑到构建又一个图灵完整的通用说话,其其实许多环境下,仅仅一个声明式的说话就足以表述一个系统了。

留意设置设置设备摆设摆设和定制之间的差异,一个可定制的DSL供给了足够的词汇量,让你能够创造性的组合成随意率性繁杂的句子,可设置设置设备摆设摆设的DSL由明确的参数组成,用户可以直接指定参数的值(例如特性模型)。当然设置设置设备摆设摆设型DSL是对照有限的,由于实例以及事物之间澳门威泥斯人的关系并不能够很轻易的表达,然而它们并不是很繁杂,你越是向设置设置设备摆设摆设方面倾斜,一样平常构建模型处置惩罚就越轻易,对付用户来讲,也就更轻易应用,由于它的外面的繁杂性是有限的。

请留意正确性和算法完备之间的不合,许多领域专家能够正规的正确的定义他们的领域里的器械(即这个领域是什么),然则他们不能够定义算法来实现系统,然则作为开拓者来说,你的事情便是澳门威泥斯人供给一种形式说话来给领域专家用于表述事实,然后实现天生器和解析器来把这些事实映射为可履行的算法(要和它们表述的常识维持精确),DSL表述了“什么”,而模型处置惩罚器添加了“若何”。

假如必要关注你的系统由哪个3GL说话来抽象(例如,你必要一个图灵完整的强大年夜的表达能力,而不用对照大年夜的语义扩展),考试测验定义一个DSL来实现这个并不是一个好的留意。定义或者天生一个API,来闪开拓者直接用3GL写代码, 你可以在天生的代码里直接天生挂钩,闪开拓者可以直接用3GL代码实现一些特殊的功能,维持挂钩的目的性必然要明确,其数量必然要有限!

符号,符号,符号

构建DSL的时刻,体现符号是相称紧张的。作为说话设计者,你关心的可能多数是基础的元数据模型,可能并不真正的关心”漂亮的语法”, 然则从领域用户的角度来看,环境可能恰恰相反。

分外是在营业领域(但不限于),要想成功,你必须调剂你的体现要领来适应这个领域(以致是这个领域已经存在的体现要领)。试图劝服他们来应用一个“更好的体现要领”每每会让你失望,只要实现他们有的就行了。

留意这可能必要文本或者图形符号,类似于Excel电子表格,表单系统或者他们的混杂,现在的DSL对象在这方面有限定。不过我信托在往后几年DSL对象的蜕变中将主要办理这个问题。到现在为止,你只必要斟酌到体现符号的易变性,尽最大年夜努力开拓可用的对象。

体现符号应该使通用的器械表达起来简明,能够供给一些合理的缺省规则,纵然少数必要额外的修饰来实现也是容许的。

当勾画DSL定义原型的时刻,从体现要领开始,与应用者直接交叉反省是很有用的。

图形vs文本符号

是不是图形描述的比文本描述的更轻易理解呢?着实不然。就易理解性来说最紧张的便是把必要用说话抽象转达的观点排列,一个设计好的文本符号加倍持久耐用,当然,对付一些特定类型的信息,图形符号是更好的选择:实体之间的关系,一些事故或者旌旗灯号/数据流的时序/顺序。相反,用图形展现公式是一条走不通的死路(附注:图形公式编辑器在某种程度上是与显示分数,矩阵,积分等要领的混杂体)。

在谈到抉择一个相宜的符号时,你可能必要斟酌以下两个身分:大年夜多半(但不是整个)对象情况,相对付比用户友好可扩展的图形编辑器来说,文本符号的编辑器(包括代码完成,语法高亮等)更轻易构建和蜕变,文本符号还更轻易与源代码治理和build机制集成。

此外,代替应用周全的图形编辑,你可能会斟酌文本编辑+可视化图形(见下文)。

在应用图形编辑器的情况中必要做很多事情,我建议首先应用简单的文本编辑器(文本,树,平日的框/线)来稳定说话的观点和抽象,然后再投入开拓一个完美的图形化编辑器。

在许多系统中,一些不雅点是支持图形编辑器,其它的是文本。无意偶尔候你以致想混杂这两种要领: 状态机(图形符号)此中的断言表达式(文本符号),然则这对付现在的事情来说对照棘手。

语义DSL(未评级)

只为DSL定义抽象和体现符号照样不敷的,你还必须定义抽象的意义--说话的语义。

在某种意义上,一个说话的语义比应用这个说话表达必要更多的这个领域的常识:说话容许用户应用模型仅仅表达针对付某一特定 系统/利用/案例。然后语义必要这个领域每一个系统/利用/案例 之间所有相同的器械。

从技巧上讲,这是天生器,解析器的事情,平台使他们联系起来,然而从说话应用者的角度来说(他们并不知道什么是模型处置惩罚器),语义是隐性常识“说话是若何事情的”,而它必须解释为“说话的意义”.

有许多种正式地定义语义的要领,然则没有任何一个在主流DSL实践中是足够实用的(到2008年), 由于一种说话的含义在两个方面来定义:用短文来解释,用例子用于说话应用者,并且直接向下经由过程代码天生器或者解析器和可履行平台绑定在一路。(严格意义上讲,这是营业语义的定义,由于天生器映射说话观点到已经存在语义的目标说话观点)

原文: Best Practices for DSLs and Model-Driven Development

因为篇幅太长,以是分几部分翻译。翻译水平有限,假如英语不错,最好直接涉猎原文.

向模型驱动开拓的同砚们强烈保举此文!

转自:http://www.cnblogs.com/lonely7345/archive/2010/03/29/1700106.html

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

您可能还会对下面的文章感兴趣: