Atitit.研发管理--提升效率--软件开发方法DSM总结o99
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
Atitit.研发管理--提升效率--软件开发方法DSM总结o99的更多相关文章
- Atitit.研发管理---TOGAF架构跟 (ADM开发方法)总结
Atitit.研发管理---TOGAF架构跟 (ADM开发方法)总结 1. TOGAF是在过去二十年间出现的企业架构框架 1 2. TOGAF内容结构 1 3. TOGAF 实现过程 2 4. 参考 ...
- atitit.研发管理--标准化流程总结---java开发环境与项目部署环境的搭建工具包总结
atitit.研发管理--标准化流程总结---java开发环境与项目部署环境的搭建工具包总结 1. ide系列(只开发环境需要,但部署环境也做好放上,很有用) 1 2. web服务器+sdk+网站程序 ...
- Atitit.研发管理软件公司的软资产列表指南
Atitit.研发管理软件公司的软资产列表指南 1. Isv模型下的软资产1 2. 实现层面implet1 3. 规范spec层1 4. 法则定律等val层的总结2 1. Isv模型下的软资产 Sof ...
- atitit 研发管理 要不要自己做引擎自己实现架构?.docx
atitit 研发管理 要不要自己做引擎自己实现架构?.docx 1.1. 目前已经有很多引擎了,还要自己做吗??1 1.2. 答案是自己做更好,利大于弊1 2. 为什么要自己做??1 2.1. 从历 ...
- atitit. 研发管理---如何根据自己的特挑选 产业、行业、职业、岗位与自己发展的关系
atitit. 研发管理---如何根据自己的特挑选 产业.行业.职业.岗位与自己发展的关系 1. 产业及分类 1 2. 二.行业 2 3. 职业概念- 3 4. 职业划分 3 5. 职业兴趣分类 4 ...
- Atitit.研发管理---api版本号策略与版本控制
Atitit.研发管理---api版本号策略与版本控制 1. 1.2.1版本概述1 2. 3主版本号策略2 3. 1PATCH版本策略2 3.1. 1.2.2.1次版本号策略2 表3-1 APR中支持 ...
- atitit.提高开发效率---mda 革命性的软件开发方法
atitit.提高开发效率---mda 革命性的软件开发方法 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和事实上现相分离 2 3. 眼下的问题模型和代码不同步 2 4. ...
- DevOps | 如何快速提升团队软件开发成熟度,快速提升研发效能?
今天一个小伙伴问我,如何「快速提升」一个团队的软件开发成熟度?我犯难了.我个人理解一个团队的软件开发成熟度涉及的东西很多,但最简单最直接的方法就是发钱涨工资,可是估计很多公司不愿意,那就只有扣了. 快 ...
- [ZZ]39条更好的软件开发方法
1.重构是程序员的主力技能. 2.工作日志能提升脑容量. 3.先用profiler调查,才有脸谈优化. 4.注释贵精不贵多.杜绝大姨妈般的“例注”.漫山遍野的碎碎念注释,实际就是背景噪音. 5.普通程 ...
随机推荐
- mac--有用的命令和快捷键
有用的命令: 将man命令打开为pdf文件预览 man -t grep | open -f -a Preview 定位某文件的位置 locate htop 隐藏和显示桌面文件 chflags hidd ...
- 转 SVN 在vs中的使用
给大家介绍一些SVN的入门知识!希望对大家的学习起到作用! 关于SVN与CVS的相关知识,大家可以自己去google一下. 一.准备 SVN是一个开源的版本控制系统 ...
- jQuery实现无缝滚动条
很多时候只看别人的代码时很难看懂.有很多原因,有时候可能是没有耐心,这时候看一下实现的原理就很快明白代码的内容,所以要加些注释,让自己让别人都能看明白:有的时候就是因为知识有限就是不懂,哪怕代码很简单 ...
- html、css、js文件加载顺序及执行情况
HTML页面加载和解析流程 1. 用户输入网址(假设是个html页面,并且是第一次访问),浏览器向服务器发出请求,服务器返回html文件. 2. 浏览器开始载入html代码,发现<head& ...
- Scanf函数输入字符串
Scanf函数输入字符串 #define _CRT_SECURE_NO_WARNINGS //#pragma warning(disable:4996) #include <stdio.h> ...
- 根据UserAgent 获取操作系统名称
/// <summary> /// 根据 User Agent 获取操作系统名称 /// </summary> private sta ...
- Java集合的运算之减法A-B
import com.sun.media.sound.SoftSynthesizer; import java.util.*; public class a123 { public static ...
- 【半平面交】bzoj1038 [ZJOI2008]瞭望塔
http://m.blog.csdn.net/blog/qpswwww/44105605 #include<cstdio> #include<cmath> #include&l ...
- LLVM 初探<一>
一.安装LLVM LLVM是一个低级虚拟机,全称为Low Level Virtual Machine.LLVM也是一个新型的编译器框架,相关的介绍Wikipedia. 现在LLVM的版本已经有很多,根 ...
- 准备找工作第三天——java基础_由有道云笔记倒入
循环:跳出多重循环:通过设置标号: 1 ok: 2 for(int i=0;i<10;i++) 3 { 4 for(int j=0;j<10;j++) 5 { ...