atitit.提升开发效率---mda 软件开发方式的革命--(2)

1. 一个完整的MDA规范包含: 1

2. 一个完整的MDA应用程序包含: 1

3. MDA能够带来的最大的三个好处是什么? 2

4. 三大MDA工具 2

5. 代码补充 3

6. Mda的问题 3

7. EMF与MDA 4

8. MDA跟代码自动生成的区别 4

9. openMDX-开源MDA平台 5

10. openMDX 的开发过程 5

11. MDA的两种实现 5

12. 参考 6

1.  一个完整的MDA规范包含:

  1、一个权威的基于UML的平台无关模型PIM;

  2、一个或者多个与特定平台相关的模型PSM;

  3、接口定义集合- 每个集合描述了基础模型再不同中间件平台上的实现。

2.   一个完整的MDA应用程序包含:

  1、一个权威的PIM;

  2、一个或者多个PSM;

  3、一个或者多个完整的实现- 开发人员决定支持的所有平台上的应用程序实现。

将PIM映射到某个特定平台的PSM的工作是由工具自动完成的,当我们需要支持新的技术的时候,这就简化了我们的工作。

作者:: 老哇的爪子 Attilax 艾龙,  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

3. MDA能够带来的最大的三个好处是什么?

  使用MDA方式能够带来很多的好处,最重要的三个是:基于MDA的架构总是能够随时应付昨天的、今天的和未来的下一 个主流技术。MDA将会使得应用程序和工具能够跨越中间件的边界,从而变得更容易集成。OMG Domain Task Forces小组负责在MDA中定义领域相关的工具,它将会提供更广阔的互操作性。因为这些工具将会在特定领域的首选平台上可以使用,而且如果需要,也可 以在多种平台上被使用。

4. 三大MDA工具

ArcStyler简介

ArcStyler是德国Interactive Objects Software GmbH公司开发的MDA开发软件,它遵循OMG的MDA 规范,纯JAVA 开发,跨平台。是当前最流行的三大MDA工具之一,支持J2EE和.NET平台,支持桥接器的动态加载。

4.3        建立PIM模型

如同使用一些通用的UML工具一样,可以在UML工具区建立系统的PIM模型,包括以下工作:

Ø         创建一个名为iBank的包;

Ø         在iBank包中创建一个名为iBankDiagram的类图;

Ø         在iBankDiagram图中创建Account,Bank,Transfer三个组件;

Ø         为上面三个组件添加相应的方法和属性;

完成之后得到的模型如下图:

建立PSM模型

其实在ArcStyler中并没有区分PIM和PSM,因为ArcStyler并没有提供从PIM到PSM的自动转换工具,它是选择了通过标注的方式来体现PSM的思想。

为了清晰起见,笔者将建模环节区分为建立PIM和建立PSM两个部分,那么建立PSM其实只是给上面的PIM作出一些技术相关的标注,包括以下内容:

Ø         将Bank和Account组件标注为Entity Bean;

Ø         将Bank和Account组件的永久存储管理模式标注为容器管理;

Ø         将Transfer组件标注为Session Bean;

5. 代码补充

代码生成之后,我们需要进行代码的补充工作,这是使用ArcStyler的唯一的代码工作,补充的代码主要是Bean方法实现以及测试类中的方法,需要进行代码补充的源代码文件如下:

Ø         AccountBean.java

Ø         TransferBean.java

Ø         BankBean.java

Ø         iBankTestClient.java

补充的内容参看说明文档Tutorial.pdf第47页Component Code Customization这一节。

ArcStyler可以自动生成Jbuilder工程,当我们进行代码的补充工作的时候,可以直接打开生成的JBuilder工程,其中包含所有生成的源代码,也可以直接使用其他代码编辑工具修改。注意:代码的添加和修改都在安全区中,进行反复的代码生成工作并不会被覆盖。

6. Mda的问题

由于目前流行的建模语言(例如UML)在语义方面的功能还很弱,所以目前的MDA工具几乎只支持结构型的系统,但是我相信随着建模语言的进一步强化,MDA技术会越来越丰富,工具也将越来越好。

7.  EMF与MDA

EMF这个名字,EMF是Eclipse Modeling Framework的缩写,它是Eclipse的一个重要的子项目,如果翻译成中文就是“Eclipse建模框架”。其实只从这个名字还真是难以确定它的作用是什么,我认为要完全掌握EMF应该对模型驱动开发(MDA)有一定的了解,而EMF可以看作是Eclipse上的MDA一个实现(代码生成是MDA 的重要组成部分之一),它能够生成在Eclipse上执行的代码。

MDA讲究的是把模型和应用系统实现分开,模型是最重要的部分,可以说有了清楚的模型,就完成了一半的工作

用EMF构造一个应用的步骤很简单:1、构造模型,2、生成代码,前者可以通过UML类图、Java接口、 XML Schema等多种方式定义,后者可以选择只生成模型部分的代码,也可以同时生成编辑器部分的代码,对这个编辑器做一些定制就可以得到符合需求的应用程序。

8.  MDA跟代码自动生成的区别

1) MDA不是代码自动生成的规范,相反它的目标是尽量减少自动生成的代码。

2) MDA不是代替RUP,XP等软件工程的传统开发过程,而是对这些开发过程一个有益的补充,特别是直接将分析设计阶段所产生的模型应用于编写程序,并最终影响部署后的系统行为方式。

3) 你所说的这种MDA实现还没有达到开发企业级应用的阶段,换句话说,根本不实际。其实,现在不仅仅有商业化的实现,也有很优秀的开源MDA平台,例如,openMDX

9. openMDX-开源MDA平台

基于openMDX的应用可以很轻松的移植到多个不同平台,采用了MOF,JMI,XRI,XML等标准和协议,不用过多考虑会被绑定于某一平台。

快速开发、部署和弹性配置

建立了成熟模型之后,开发测试的工作量降低到了难以想象的地步,举例来说,openCRX总共两百天的开发过程中,建模占了100天,界面设计定制用了70天,10天用于实现,20天用于测试部署。

极强的系统互操作性

openMDX平台上发布的功能模块,对于数据的导入导出都是基于Schema-XML,而且可以方便的发布为Webservice,跟其他异种系统的交互达到了轻松自如的地步。

缺点

penMDX也没有提供一个IDE来支持整个开发测试和配置应用。

10. openMDX 的开发过程

不象大多数商业工具,openMDX 没有实现PIM到PSM映射的方法。 而是提供了一个普通的,分布式的对象引擎(作为PIM 平台)。商业逻辑(模型的导出属性和方法)是作为插件添加进去的

自动生成代码和手工编写的代码是分放在两个不同的目录中,而对于导出属性和操作则是通过delegate(委托)的方式去执行手工编写代码的

11.  MDA的两种实现

I)使用模型驱动应用开发过程;II)直接利用模型驱动运行时应用系统的行为方式。前一种实现,大部分支持从UML模型转换的代码生成工具都可以归入此类,例如AndroMDA,而后一种实现就比较少,例如openMDX。

这两种方式没有优劣之分,只是取决于你的应用目的而有不同的侧重。

12. 参考

ArcStyler实战-网上银行系统 - MDA之路 - BlogJava.htm

eclipse EMF介绍系列(EMF与MDA) - Linyda工作室 - 爱好者博墅 《电脑爱好者》杂志官方网站 - 计算机世界旗下网站! - powered by X-Space.txt

openMDX-开源MDA平台(1).htm

atitit.提升开发效率---mda 软件开发方式的革命--(2)的更多相关文章

  1. atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表

    atitit.提升开发效率---MDA 软件开发方式的革命(3)----自动化建表 1. 建模在后自动建表 1 1. 传统上,需要首先建表,在业务编码.. 1 2. 模型驱动建表---更多简化法是在建 ...

  2. atitit.提升开发效率---mda 软件开发方式的革命

    atitit.提升开发效率---mda 软件开发方式的革命 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和其实现相分离 2 3. 目前的问题模型和代码不同步 2 4. MD ...

  3. atitit.提升开发效率---MDA 软件开发方式的革命(3)----自己主动化建表

    atitit.提升开发效率---MDA 软件开发方式的革命(3)----自己主动化建表 1. 建模在后自己主动建表 1 1. 传统上,须要首先建表,在业务编码.. 1 2. 模型驱动建表---很多其它 ...

  4. atitit.提升开发效率---MDA 软件开发方式的革命(5)----列表查询建模

    )----列表查询建模 1. 配置条件字段@Conditional 1 2. 配置条件字段显示类型为range----@Conditional(displayType = displayType.ra ...

  5. atitit.提升开发效率---MDA 软件开发方式的革命(4)----编辑表单建模

    )----编辑表单建模 1. 建模语言的选型anno+html...不是uml 1 2. 指定显示模板 @BeanEditForm(tmplt="c:/edit.html") 1 ...

  6. atitit.提高开发效率---mda 革命性的软件开发方法

    atitit.提高开发效率---mda 革命性的软件开发方法 1. 软件开发方式的革命开发工具的抽象层次将再次提升 1 2. 应用框架和事实上现相分离 2 3. 眼下的问题模型和代码不同步 2 4.  ...

  7. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结

    Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结 1. 管道抽象 1 2. 层次结构抽象(json,xml etc) 1 3. 异步抽象promise 1 4. Ide ...

  8. atitit.提升开发效率---使用服务器控件生命周期 asp.net 11个阶段 java jsf 的6个阶段比较

    atitit.提升开发效率---使用服务器控件生命周期  asp.net 11个阶段  java jsf 的6个阶段比较 如下列举了服务器控件生命周期所要经历的11个阶段. (1)初始化-- --在此 ...

  9. atitit.提升开发效率---动态语言总结

    atitit.提升开发效率---动态语言总结 ruby,python 都不错,就是语法不好, 应用不广泛,文档,工具都非常少,不推荐... php狠不错,就是高级特性不行.. 看来子有.net/jav ...

随机推荐

  1. Oracle 取随机数(转)

    1.从表中随机取记录 select * from (select * from staff order by dbms_random.random)      where rownum < 4 ...

  2. SQLServer2008R2 mdf文件还原数据库

    偶然遇到要用mdf文件restore数据库,试了2个小时才弄出来,百度查出来的我试了都不太好用,或者是我没理解. 下面把我用的记录一下,以防忘记. 工具:SQLServer 2008R2 步骤: 1. ...

  3. UNIX环境高级编程--10. 信号

    第十章        信号    信号是软中断,提供了一种处理异步事件的方法.例如,终端用户键入终端键,会通过信号机制停止一个进程,或及早终止管道中的下一个程序.    每个信号都有一个名字,SIG开 ...

  4. Swift3.0基础语法学习<二>

    对象和类: // // ViewController2.swift // SwiftBasicDemo // // Created by 思 彭 on 16/11/15. // Copyright © ...

  5. 对于for循环构成的九宫格里的button,如何满足“有默认选中的一个,并且只能选中一个”?

    需要构造一个全局变量self.priceBtn 在九宫格写法中 ) { self.priceBtn = btn; self.priceBtn.selected = YES; } 在button的点击方 ...

  6. LeetCode.4 两个有序数组的中位数问题

    这道题是那种典型的有显而易见的解法, 但是想要达到较优的时间复杂度的话就不是这么好做的题目. 我来说说我自己的思考过程 : 首先最先想到的是 O(m + n) 的解法, 也就是利用归并排序的归并将两个 ...

  7. MVC4下配置log4net 五部曲

    第一步:把log4net.dll 编译成Framework 4.0 第二步:找到项目的Properties下的AssemblyInfo.在最下面添加:[assembly: log4net.Config ...

  8. iOS 微信支付

    相关资料 SDK下载:https://pay.weixin.qq.com/wiki/doc/api/app.php?chapter=11_1 APP端开发步骤说明:https://pay.weixin ...

  9. 复利test

    因为上节课老师有给我们讲了单元测试的概念及其基本操作,我就对我之前的复利计算器进行了改进和测试.因为从控制台的简单输入输出对单元测试来说不够完善,便参考了其他同学的优秀编程又重新写了一个复利计算器的框 ...

  10. JSON和js对象之间的相互转化

     jQuery插件支持的转换方式 $.parseJSON( jsonstr ); //jQuery.parseJSON(jsonstr),可以将json字符串转换成json对象 http://www. ...