Atitit.研发管理--提升效率--软件开发方法DSM总结o99
1. 什么是DSM?
只有提高抽象层次,将软件直接面向建模专家或系统分析师,然后运用自动化代码生成技术,这样才能高质量大幅度快速开发出软件系统,在OOPSLA(领先的软件工程会议),大家认为DSM可能是一种解决方案。Bill Gates 和 Grady Booch也发表过同样观点。
DSM意味Domain-Specific Modeling领域定义建模,通过使用领域概念直接指定解决方案,DSM提高了超越程序代码之上的抽象层次,最终软件产品将从高层次的设计中直接自动产生,这样一个自动过程是可以实现的,因为 语言和代码产生器可以满足某一个公司或领域的需求,建模专家使用定义这个自动机器,而程序员只管使用即可。
实践经验已经证明:DSM比现有方式(包括基于UML的MDA)效率提高5-10倍,正如Booch说的那样: ”当建模概念可以直接映射到领域Domain,而不是计算机具体技术概念时,MDA的价值已经完成“,这句话的意思是: MDA已经证明我们可以直接从领域专家Domain观点直接建模,而不必拘束于具体的计算机技术概念,或者说:直接由有经验的系统分析师/建模专家分析设计进而生产出软件系统已经被MDA证明是可行的了,MDA的价值也就在于此,
Booch等人寄希望于使用DSM替代MDA。
由建模专家定义有关领域和组件的代码产生器,这样做的结果要好于大多数开发者手工开发。从MDA教训来看,大家认识到:不可能有“一种尺寸适合所有身材”的代码产生方案,不必象MDA那样疲于往来返工,DSM所做的正如将代码编译成汇编语言的编译器所做的。
作者:: 老哇的爪子 Attilax 艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://blog.csdn.net/attilax
2. DSM使用的语言DSL
domain-specific languages (领域 建模语言)。
使用 XML 在应用组件中传递数据,使用 SQL 存取数据,使用 WSDL 来说明面向 Web 应用的组件的接口等等,但是它们中没有一个直接针对最终用户所面对的业务问题。
DSL 被设计为直接面向它所要解决的问题领域。在某种程度上,它能够代替编码,数据交换,配置等工作,我们常把这类语言称为建模语言
Anno+html>>>uml
3. 模型的优点
模型受欢迎是因为它能够很好地表述问题从而避免陷入技术细节中。当技术变得越来越复杂的时候,模型是提高生产力的必须手段。
模型的另一个好处是可以让程序 员和问题领域的专家使用同样的表述方法,这有助于团队成员间的沟通。
我们也可以把使用模型看作弥合技术和业务之间缝隙的方法。
4. DSM 跟与MDA区别
DSM规避了MDA发展中的难题,不苛求在PIM这个层面完全表达模型的细节。如果不限定领域的话,现有的模型描述语言以及约束描述如OCL,模型转换语言QVT等都不能满足一方面表达能力足够,描述精确,一方面又足够抽象,同时还能够简单易用的要求。这种情况下,DSM不失为一个好办法。
DSM与MDA主要区别是:MDA工具商自己定义代码产生器,这些代码产生器第一次看非常好,但是以后就变样走味了,难以适应需求的变化。.
DSM中,由你控制DSL和代码产生器,这些工具可以被调整以适应你自己的系统,作为开发者,你只需要定义DSL和实现自己的代码产生器,所有这一切都是由你来定义控制,正所谓定制性强
5. MDA的实现
系统业务逻辑和实现技术的分离,我们都认为它是支持 MDA 的,比如 VSTS
不管白猫黑猫,抓到老鼠就是好猫。对软件开发者以及各种涉众而言,只要实现了业务逻辑和底层技术平台的分离,能够保证当年辛苦辛苦建模的成果不随着技术平台的变化而像西西弗斯推石头上山那样一遍一遍不可避免地重来,它就是 MDA (其实不叫 MDA 也没啥 :D )。
图 3 基于 MDA 的开发过程
如图 3 所示,对应传统的需求-分析-设计-开发-测试-交付过程,基于 MDA 的开发过程由模型和模型之间的转换组成。最终的应用程序也可看做模型,它是对应最终实现平台(如机器码)的 PSM
微软的 VSTS 中,提供了定义领域特定语言 DSL ( Domain Specific Language ),也就是我们上面所说的领域元模型,的方便的环境,并支持从基于 DSL 的模型到程序代码的生成以及双向工程。微软是典型的背叛标准者,把 MDA 的思想全盘接受,换个名字,然后决然抛弃了 MDA 的核心标准 UML 和 MOF J 。同时,微软又是绝对的现实主义者,他从切实提高开发效率出发,提供至少在目前阶段更容易被开发者所接受的 MDA 开发支持。我认为,从这个意义上说, VSTS 是广义的 MDA 工具。
其他很多工具,由于商业宣传等因素,只要和模型转换、代码生成等挂上钩的,往往也声称自己是 MDA 工具。这些都可以理解,也没有必要较真。按照上文我们分析的,只要实现或者部分实现了业务逻辑和技术细节的分离,都可以说是广义的 MDA 工具,比如基于 Velocity 面向特定平台如 J2EE 的代码生成工具 XDoclet 、 Middlegen 等。
6. DSL案例
TSS上最近的文章“Improving Developer Productivity with Lightweight Domain Specific Modeling”演示了如何使用DSM实现轻量建模的过程,共分五步:
ArgoUML 能够用作定义DSL模型,开发人员能够设计DSL模型适合问题域。
将 ArgoUML模型转为Eclipse模型格式的Ecore.
使用Eclipse的插件JET模板定义代码如何产生。
Ecore模型输入到模板定义中,然后再定义Ecore模型中的模型元素和带有Merlin的JET模板之间映射。
最后结果是产生最终代码。
7. 参考
模型驱动架构(MDA,Model Driven Architecture)浅述 - - 博客频道 - CSDN.NET.htm
什么是DSM_百度知道.htm
DSM与MDA - 阿Ben的日志 - 网易博客.htm
[摘译] 面向领域建模 - 研究与实践:智慧城市、云计算、物联网和软件工程 - 博客频道 - CSDN.NET.htm