15种你应该使用模型驱动开发MDD的理由

使用面向对象思维的MDD/DDD已经是一种主流发展方向,DSL属于MDD一个更高级发展,企业架构网站昨天推出一篇15 reasons why you should start using Model Driven Development,有15种理由,应该足够说服任何人了。

1. MDD is faster MDD很快(真正快速开发)
在MDD应用模型中能够指定一个比传统的编程语言更高的抽象层次。该模型能够自动转化为可立即运行工作的应用程序(通过UML工具),生成可解释/执行模型代码。模型中的每个元素代表了多行代码,这样使得模型在一个更高的抽象层次比相应的代码要精简得多,更能大道至简。

2.MDD is more cost-effective MDD更具有成本优势
因为MDD快速开发所以比较快地推向市场,MDD意味更少的人员 专家,更高的质量,成本只是你学习MDD的成本以及工具采购,使用MDD拓展和维护应用程序的做法也更符合成本效益。通过更高级别模型阅读,比较容易理解应用程序。

3. MDD leads to increased quality MDD引导质量提高
因为软件架构是在一个更高模型级别定义,然后通过引擎或框架转换成代码,这样我们能够让我们最优秀的人员从事引擎和框架的开发,进而提高平台的质量。 我们在项目中学习到的最佳实践模式可以被导引到引擎或框架代码产生器中,这样将被重用到所有使用MDD的项目中。

4. MDD is less error-proneMDD很少出错
测试会浪费很多时间,因为MDD可以确保代码的质量,这样让你可以专注于测试应用程序的特点功能即验收测试上,不必关注通用的一些测试项目,如基础设施相关的技术问题或安全漏洞。

5. MDD leads to meaningful validationMDD引导有意义的校验
业务验证都已经在更高级别的模型中完成,编程工具只能帮助你验证代码语言的错误,不能验证业务上的错误。

使用DSL能够在设计时候就执行一下,这样,错误信息也是 domain-specific级别的,可见Static Verification: An External DSL Advantage一文。

6. MDD results in software being less sensitive for changes in personnelMDD可以不在乎人事变动
不需要特别的技术高手或架构师就能够建立软件,节约人力成本。此外,如果有人加入一个项目,比较容易理解高层次的软件应用模型,这比试图通过阅读理解源代码要轻松多(banq个人体会:本人曾经只用两三个月就理解了一个中型NGOSS级别的BOSS系统(通过together逆向工程模型化),当然也主要因为原系统基于Hibernate的模型对象化,如果是纯粹基于SQL就没有这么幸运了)。

7.MDD empowers domain expertsMDD授权领域专家
业务领域专家能够注重建模,而技术专家可以专注于建立一个MDD需要的框架或DSL等工具。一个软件系统不再只是程序编制就可以了,领域专家可以通过符号(如文字,图形,表格)等直接表达他们对业务领域的深入理解 。

8. MDD let advanced programmers focus on the hard stuff MDD能够让高级程序员专攻难关
在MDD中,高级程序员的重复性工作要少得多,他们可以专注于他们工作的创造性方面。他们可以集中精力建设MDD的工具。他们还可以指导初级开发或领域的专家,也可以申请领取困难攻关,领域专家可以专注例如模型的图形用户界面,流程和业务规则。而应用程序的集成部分(使用webservices,API调用,数据库集成等)对于领域专家来说,存在太大困难,可以由高级程序员来完成。


9. MDD bridges the gap between business and IT MDD在业务和IT之间架设了桥梁
领域专家(或系统分析师)可以直接参与业务发展进程(见第7点)。
技术专家(软件应用)可以在一个更高的层次定义尽可能和领域概念的定义声明有关模型。
通过在模型和模型实现之间定义一个重要的转换机制,就可以在业务和IT技术之间建立一个桥梁,比如使用一个基于model-driven SOA的框架

10. MDD results in software being less sensitive for changes in business requirements MDD可以减少业务需求带来改变的影响面
对软件开发的问题之一是业务需求经常变化速度超过了软件系统支持改变,这对于企业是一个重点战略问题:能够保持足够长的时间调整其核心业务与IT流程。
MDD使软件开发更快(见第1点),它也导致更容易改变应用(因为第2点和6)。如果在业务需求和软件之间的存在一个联系,那么应用程序甚至有可能自动适应部分模型的变化(见第9点)

11. MDD results in software being less sensitive for changes in technology MDD导致技术对变化不是太敏感
技术变化很快, Java EE, SOA / SOBA, webservices, REST, SCA, OSGi等等,甚至迁移到云计算环境,当您希望您的应用程序迁移到其他技术时,MDD可以确保你不必改变你的应用模型,。唯一需要改变的代码生成器(或DSL解释器)。改变后的代码生成器(或添加额外的代码生成选项)可以帮助所有的应用程序模型直接转换成基于新技术架构的代码。

12. MDD really enforces architecture MDD增强架构
当使用MDD开发软件应用程序,保证符合选定架构。你可以真正实现架构标准化, 构建架构原则Constructional architecture principles能够知道设计构建,并且能够反映在代码生成器或解释器中。

13. MDD captures domain knowledge MDD可以截获领域知识
关于MDD的优点是,你不是只创建软件,但你也捕捉正式高层次的领域知识模型。在大多数情况下这方面的知识是不明确,见文章基于DDD的DSL

14. MDD provides up-to-date documentation MDD提供最新的文档
当使用MDD是,您不会遭遇不完整或过时的文件,因为该模型使用正确的抽象,可以让领域专家和客户都能看懂。

15. MDD enables to focus on business problems instead of technology MDD能够关注业务而不是技术
停止讨论使用WS-* 或者 REST,MDD能够让你专注于业务问题如何解决,而不是着眼于如何解决这些问题的技术支撑。

MDD倡导的业务和技术架构分离,分别专业发展导致了现在云计算平台的崛起。

提供专门针对业务的DSL语言,完全屏蔽技术架构对业务模型的影响,通过引擎或代码生成器解释器将业务模型转换在可以在他们云计算平台上运行的代码,这不仅是一个美梦,而且已经在Force.com云计算平台实现。

Google的App Engine也是这样一个思路,通过python Java实现面向业务的逻辑编程,无需关心技术架构伸缩性或扩展性,通过google App引擎将python业务模型转换成可在其云计算平台运行代码,google App引擎就是MDD倡导的引擎或代码生成器,而且上升到云计算平台。

所以,衡量是否真正云计算,只要看你能够将业务和技术架构分离,甚至提供针对DSL语言作为Paas或SaaS对外接口。

云计算五层架构

8 reasons why Model-Driven Development is dangerous
8种理由MDD是危险的:

1.MDD导入了很多刚性,由于MDD高度抽象,导致你无法修改一点点实现细节。

2.模型只有在灵活性被设计考虑到了才体现灵活:你被MDD工具限制;你只有在DSL提供范围内才能灵活,DSL相当于在你使用框架或引擎上更高层次的Hard code硬编码;有些模型因为低层次语言实现才显得灵活,而这点可能正是你需要的。

3.项目成员角色不同,MDD成员不同于传统的项目,程序员技术专家去做MDD工具软件了,使用MDD工具的是业务专家,业务专家除了懂业务以外,还需要能够用模型语言表达出来,兼具这两方面人才的人很少。

4.模型环境不支持版本控制,带来痛苦。

5.很少有MDD工具成熟应用在大型项目中。

6.提出需求的人员也必须搞清楚MDD工具能做些什么和不能做些什么,需求被工具限制了,这和数据库驱动设计开发有些类似。需求会被数据库设计技术限制或导引。

7.MDD是一种炒作。

8.分散创新的焦点,创新集中在MDD工具哪些cool特性,而不是需求业务本身。

What Model Driven Development can learn from Content Management Systems一文提出,MDD应该向CMS内容管理系统学习,当前CMS工具很多,很多人利用CMS工具开发网站,主要优点是方便,而MDD也可能因为方便开发程序能得到推广,当然和CMS缺点一样,MDD也只能限定在一些低级市场。复杂大型项目还是不能使用MDD。

一直比较关注模型驱动开发,最近写了几篇blog,感兴趣的可以看看一起交流下
模型驱动开发(MDD)介绍 http://www.cnblogs.com/zhoujg/archive/2010/09/20/1831042.html
软件工厂(Software factory)介绍 http://www.cnblogs.com/zhoujg/archive/2010/09/25/1829403.html
DSL(Domain Specific Language)介绍 http://www.cnblogs.com/zhoujg/archive/2010/09/26/1831686.html
特定领域建模 DSM(Domain Specific)介绍 http://www.cnblogs.com/zhoujg/archive/2010/09/17/1823210.html