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

新蒲京澳门app下载_酒文化网进入



上一篇: [翻译] DSL和模型驱动开拓的最佳实践(1/4)

视点ViewPoints

一个软件系统平日环境下只用一个符号是弗成能描述他所有的方面的, 此外,为了开拓流程的必要,不合的方面,在不合的光阴里,会被不合的角色描述,由于你要包管有一个干净的观点分离.是以,最紧张的是找出描述一个系统不合观点的这些视点,为他们零丁供给体现符号和抽象.

在一些系统中意味着你要为不合的关注点定义零丁的DSL, 别的的环境下,你可以为一个DSL语义定义一些片断,每一个对应一个视点.

无论你的对象支持哪个措施, 视点必要能够联系到别的的描述全部系统的视点,确保这些”连接点”是显示定义的,并且稀有量限定, 别的,要确保这些视点之间依附的偏向是明确的--强烈建议应用单向依附进行严格分层.

留意这和软件系统的模板化很类似的, 相同的规则利用,强制的内部同等性,少量的外部接口,只管即便少的耦合.

分区Partitioning

和软件其它部分一样,DSL编辑器和模型处置惩罚器不能够随意扩大,在你从一个小规模的原型开始一个项目的时刻每每会忘怀这点.在大年夜多半环境下, 我们可以把全部模型划分为零丁的”模型单元”.

分区会影响到很多方面,分区可以作为 签入/签出或者锁定的单位, 别的,常常直接引用一个分区,也可以经由过程代理实现跨分区引用,(对象强制)名称引用或者延迟加载. 分区在本地的限定是常常在编辑器里进行实时反省,全局限定是仅仅可能只按需反省, 这可能是全局编译历程的一部分.

当然, 确保每个分区是零丁处置惩罚是很故意义的,否则, 可能就必要明确区分哪些分区应该在在给定的处置惩罚运行的时刻处置惩罚(至少可以经由过程查询路径,目录布局能够找到必要处置惩罚的分区,就象C编译器里的include路径一样).你以致必要斟酌一个零丁的编译步骤来合并多种分区的零丁处置惩罚历程中的结果(就象C编新蒲京澳门app下载译器,把每个文件都零丁的编译成一个目标.obj文件,然后经由过程 symbol/reference进行全局链接).

在很多对象里,分区并不是完全透明的.你可能必须明确的分区,或者你必须确保你不会意外地创建对付其它分区的依附.是以,最好在DSL和天生器开拓历程中就斟酌到分区,能够响应地设计元数据.

可行的分区策略设计是说话设计的一部分!记着在这个背景中:哪个分区改变会导致模型的特点变更(比如元素名称改变会导致改变所有其它分区中经由过程名称引用这个元素地方发生改变), 在哪里存储链接(常常保存在模型中的逻辑指向别的一个的地方吗?),假如不是这样,若何/在哪/什么时刻来节制引用和链接存储.

分区是真正地物理的瓜分全部模型,它可以与逻辑模型布局或者视点结合起来(比如命名空间),也可以不结合.比如一个描述计费子系统的分区可能包孕嵌在多个命名空间中的元素,覆盖多个视点(数据布局,流程,UI定义).

蜕变 Evolution

在开始一个MD*项目时轻易被忘怀的紧张一点便是说话演化的需要性。假如你改变说话,确信你已经有法子调剂模型处置惩罚器和已经存在的的模型。

这必要以下列出来的一个或多个:严格的设置设置设备摆设摆设治理节制,模型中的版本信息用来触发兼容的模型处置惩罚器,多层模型处置惩罚的撤销,能够把基于老说话的模型转换基于新说话的模型的模型迁移对象。

模型迁移是否轻易很大年夜程度上取决于对象, 有些对象能够使模型异常平滑地蜕变,然则有些情况并不新蒲京澳门app下载是这样.在抉择应用哪个对象的时刻必然要斟酌到这点.新蒲京澳门app下载 留意假如是文本DSL, 模型迁移至少可以经由过程正则表达式和grep来完成。

必然要只管即便削减对现有模型进行的篡改,向后兼容和折旧是在MD*领域值得铭记的两个技巧,你可以用你的模型处置惩罚器来网络有若干被弃用的说话特性仍旧在应用,到模型中看不到有应用的时刻,你就可以安然地把这个废弃的说话特性给移除了。

完美隔离多个视点的DSL,防止一个DSL的一些地方改动时,引起所有模型的连带影响。

通用说话的谬误

预定义的通用说话和天生器都是都是诱人的--尤其是假如你想描述你的系统的技巧方面。终究你可以应用UML模型统统,着实只是添加了一堆原型和标记值。

应理小心地是,应用预定义说话会使你花费大年夜多半光阴在思虑假如把你的领域观点硬装进现有的说话。同时,你还不得不斟酌到现有说话的抽象和符号。当然,一些通用说话供给了适配功能,比如UML的Profile。至于在现在的实用对象里面,UML照样不停很受迎接的。你必须添加一些限定来防止用户在你的领域模型里应用一些没故意义的UML功能.不过,你的说话常新蒲京澳门app下载常会对照像UML,定制的UML对象的实际实用性是远远不敷的(留意:符号!符号!符号).着末,你的模型处置惩罚器必须处置惩罚大年夜而繁杂的UML元数据--Profile常常添加,并且从不删除任何器械。

在实践中,在大年夜多半环境下,最好是定义你自己的DSL, 最初他可能必要多一点事情量,然则不久他就会变得更有效率。

然则,确认你没有从新发现轮子。比如,没有需要从新彻底改造状态图和时序图,UML在这方面已经相称不错了。不过,对付一个有用的UML符号有小的改变,Profile机制是不错的选择。

以是,假如已经有对拍照宜的通用说话了,直接应用存在的说话,只管即便确保你自己的实现是兼容的(duck modeling:假如它看起来象状态机并且具有状态机一样的行径,那么便是一个状态机1).

进修3GLs

上面我们评论争论了一个事实,那便是DSL不是一个变相的通用说话。然后,DSL仍旧可以进修现有的形式和说话。

这里有四个例子:

1.许多说话必要某种范围的观点: 对付模型元素上的一个给定的引用, 只有类型兼容的模型元素的一个子集构成了这个引用有效的目标。

2.特点不仅可以利用在面象工具里的类上,同样适用于状态机,或者保险条约规范。

3.命名空间的观点在许多DSL里呈现,用来组织模型元素的命名规划.

4.许多DSL有实例的观点,能够表达一些观点是其它观点的一个实例,有效地引用内置说话类型系统,作为你的约束反省的一部分,你可能必要做类型谋略和类型反省。

要成为一个优秀的DSL设计者,有对照广泛的现有编程说话范式的常识是很有用的,请读这本书《Concepts, Techniques and Models of Computer Programming》。

原文: http://www.jot.fm/issues/issue_2009_09/column6/index.html

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

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

转自:http://www.cnblogs.com/lonely7345/archive/2010/04/02/1703038新蒲京澳门app下载.html

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

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