模型驱动开发(二)

原创 2004年02月27日 10:20:00

数据库(DBMS)模型

J2EE开发中,数据持久性是一个重要的问题。通用的方法是用关系型数据库存储数据。为了存储数据,必须定义在对象模型和数据库间的对象-关系镜像。

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

OptimalJ用技术模式3自动从模型产生数据库模型,以此来处理对象-关系镜像。数据库模型用来建模和镜像所有的相关的数据库定义。数据库模型支持大纲、表、字段、行、外部键、主键和唯一约束。

 

对模型中的每一个元素,重要的是在定义中没有实现的细节,这意味着在这个阶段不产生任何类型的技术类或组件。

 

所有以上模型都能用相应的图形编辑器以图形化的方式观看,这样使模型更直观和更容易理解。

OptimalJ模型的实现

一旦从域模型产生应用模型,OptimalJ自动用实现模式4转换应用模型到实际代码。

 

商业逻辑(EJB)、数据库(DBMS)和展示(WEB)模型的代码可以分别生成或一次全部产生。当这些模型创建或更新时,它们继承了域模型的所有相关定义。一旦所有的应用模型存在,OptimalJ产生实际的代码完成各自模型的组件。自动产生的过程确保了和域模型的一致性,节省了大量的时间并减少了潜在的编程带来的错误。自然,WEB模型依赖商业逻辑模型,而商业逻辑模型依赖数据库模型。OptimalJ为你维护了模型之间的相互依赖性。

 

OptimalJ用它的动态同步工具(active synchronization facility5),确保模型和代码一直保持同步。OptimalJ生成的代码是J2EE全部功能并和其规范相一致。产生的代码由JavaJSPXML文件、实体Beans、会话BeansSQL脚本组成。

OptimalJ产生的全部代码放置在保护块(guarded blocks)。“Guarded”意味着产生的代码是被保护的,所有开发人员不能修改。然而,OptimalJ提供了自由块使开发人员能够增加对生成代码的扩展内容。当应用系统被重新生成时,OptimalJ保留在自由块中的定制代码。

 

独立于集成开发环境

开发人员能够在OptimalJ中定制代码,OptimalJ包含一个基于源代码开发的集成开发环境NetBeansJava集成开发环境。OptimalJ有所有NetBeans功能的特色,例如:

l         Java语法敏感的源代码编辑器,含有代码自动完成和关键字颜色标识。

l         工程支持结构化应用系统,允许开发人员快速切换上下文。

l         远程调试

l         构造器和编译器

l         Java存档包装器可以打包Java类集合为部署包。

 

另外,开发人员可以在OptimalJ中用Java类图编辑器以图像化的方式查看。Java类图编辑器自动从Java源文件所在的包生成和显示UML风格的类图。Java类图和OptimalJ资源导航树以及Java源代码编辑器完全同步。这意味这在这三个窗口(图表、导航和源代码编辑器)所作的任意修改将在其它两个窗口将跟着变化。

即使OptimalJ包含了NetBeans集成开发环境并同其分享了与开发人员接口的菜单和窗口,开发人员能够选择用NetBeans集成开发环境或其它的集成开发环境。OptimalJ已经扩展了对Borland JbuilderIBM WebShpere Applicatin Studio Developer(WSAD)Sun SunOne Studio的支持。此扩展支持帮助开发人员区分由OptimalJ自动生成代码的保护块和开发对生成代码的增加子集扩展的自由块。另外,这些集成开发环境也包括一系列OptimalJ特定的菜单项,例如SQL workbench和一个集成测试部署环境。

EJB模型的实现

OptimalJ生成的EJB1.1EJB2.0EJBs和在域模型所定义的内容一致。EJB模型包含和前端组件(JSPs)交互的功能也有和数据库与EJB服务器交互的方法。OptimalJ存在如下主要EJB模型元素:

l         EJB模块(module)-所有生成的EJB模型元素的包容器。

l         EJB数据大纲-具体指定EJB组件的数据结构,包含有EJB数据类和EJB数据关联关系。

l         EJB主键类-代表主要唯一约束。在EJB主键类中的EJB主键属性来源于在域模型中的主要唯一约束。

l         EJB实体组件-代表数据库中的数据和作用于该数据的商业方法。

l         EJB会话组件-一个组合数据集的抽象。一个会话组件是服务为中心的并意谓对实体组件执行操作。它提供代表客户端的服务去聚集逻辑上的相关数据并从一个单一接口表示服务。会话组件根据域服务创建。

l         EJB消息驱动组件-代表一个在EJB模型中设计的JMS消息消费者。它或者消费一个特定的消息或者消费一个为特别目的(主题或队列)的所有消息。对此组件生成的代码是一个J2EE消息驱动Bean的实现。

OptimalJ减少了生成EJBs的复杂性并帮助开发人员最大化生产力、灵活性和质量。OptimalJ确保旨在更有效地书写应用系统所的努力,真正区分了公司的业务并减少了提交到市场的时间。然而,为了增加生产力,不仅关心EJB在代码的开发方面是必须的,同时对EJBs的部署和测试方面的关心也是必不可少的。OptimalJ为此提供了集成测试和部署环境。6

数据库模型的实现

开发一个新的应用系统需要数据库脚本去创建数据库表。当域模型完成后,菜单项“从域模型生成数据库(Generate Database from Domain)”将从域模型产生数据模型。数据模型包含了应用系统的关系数据库定义。OptimalJ产生对底层DBMS创建/删除相应数据库表的SQL命令脚本。

开发人员需要定义为哪一个数据生成SQL脚本。OptimalJ提供了一个集成的SQL工作台去执行SQL脚本。OptimaJJDBC(Java Database Connectivity)对数据库进行访问。

OptimalJ生成一个部署描述符文件,J2EE包容器7通过此文件部署J2EE应用系统。

 

OptimalJ也提供给设计人员用数据访问对象(DAO)代替EJBs读取数据的设计方案。但是,保存数据时,EJBs是更好的方案,因为它能确保保存交易的安全性。

 

OptimalJ从域类转换为数据库模型时生成数据访问对象(DAO)组件。数据访问对象(DAO)组件也包含了页迭代器(Page Iterator)的功能。迭代器是数据访问对象组件的扩展。当浏览大批量数据时,它提升了应用系统的性能。不返回整个数据集,而是维护代表数据集对象的主键列表,迭代器只返回需要的数据到客户端浏览器。列表和页的数据量定义在属性文件中。

展示模型的实现

展示层定义了一组默认展示组件的集合。这些组件基于JSPsServlets并为HTMLWML的客户端实现。展示层源自域模型,域模型确保一致性和前端组件的质量。

 

展示和商业层的分离使开发人员可以在存在的EJB层上,创建新的WEB前端。因此,OptimalJ包含了一组展示模型用了生成附件的组件。例如,通过选择不同的展示模型,相同的EJB层可以用基于HTMLWEB组件也可以用基于窗口的用户接口组件。OptimalJ的可拆卸的模型架构使相同的EJB而用不同的表现形式成为可能8。在生成Web组件后,开发人员有一个简单的展示层和菜单结构。由于Web组件连接到EJB层,可以立即对数据库进行操作如读、新建、删除和更新等。

 

OptimalJ用基于模型-视图-控制器(MVC)概念的Apache Struts架构实现展示模型。MVC的设计主要为了便于适应控制的改变。它分开了商业逻辑和数据的接口并提供仅仅基于JSP9的多项优势。编辑JSPCSSJSP模版能够改变由于系统的外观。设计人员用可利用的Web动作定义和应用系统的用户交互,Web动作可以被编辑。添加新的WEB动作是非常容易的。设计人员通过在JSP页面嵌套Java脚本增强同HTML表格的交互。OptimalJ提供的Dreamweaver插件可以改变布局,方便网页设计人员改变WEB组件的外观。

模型驱动集成

当今企业面临最大的商业挑战是如何有效利用现有资源,如当前正在应用的系统。因此,集合每一个开发项目都需要某种层次的集成。因为开发和集成是紧密相关的,OptimalJ扩展了它的模型驱动开发环境,包含了模型驱动集成环境。作为对应用模型的扩展,OptimalJ提供了集成模型。当开发一个新的J2EE应用系统时,集成模型减少了复杂性并加速了应用系统的集成。

OptimalJ能够集成:

l         现存的Web services,包括在.Net平台上的Web services

l         OS/390平台,通过Java连接器架构(JCA)标准。

l         现存Java应用系统

l         现存CORBA应用系统。

OptimalJ的调用模式是集成模型的基础。设计人员通过导入如下接口文件可以加速和简化了应用集成:

l         Web服务描述语言(WSDL)文件。

l         动态程序连接(DPL)CICS COBOL应用系统

l         COBOL书写的消息处理程序(MPP)IMS交易

l         Java类签名

l         CORBA接口定义语言(IDL)文件。

执行器模式重构WSDLCICSIMS应用系统、Java签名和接口定义文件转换到域服务模型。从域服务模型,生成JSP页面,作为测试这些组件的用户接口。

另外,也生成了会话Bean和它的部署描述符,会话Bean中包含了对第三方组件的调用代码。当OptimalJ需要调用一个用Java或任何其它技术书写的方法的时候,执行器模式产生相应的代码去调用这个方法10

总结:

在模型驱动开发环境中,构建成功应用系统关键的第一步是全面和精确的建模。为了管理大的应用系统,基于模型的设计和开发是极为重要的。

 

OptimalJ基于MDA/J2EE的模型驱动开发和集成环境为商业建模和软件开发间的鸿沟搭建了桥梁,通过构建正确的商业模型驱动应用开发,而不是其它的方法。OptimalJ在不同的抽象层次上提供了实质潜在的重用,它使得为了商业的需要使用变化而重新建模系统更为容易。通过分离商业模型和架构模型,分离架构模型和实现语言,OptimalJ也提升了系统性能的质量、抗摆动行和可维护性。通过这些方法,OptimalJ决定将变化应用到系统的哪一个层:

l         商业变化在域模型。

l         架构变化在应用模型。

l         代码变化在代码层。


1参见Compuware白皮书“OptimalJ:商业规则如何对变化的快速响应”

2 参见Compuware白皮书“OptomalJ:模式如何将UML模型转换为高质量的J2EE应用”。

3参见Compuware白皮书“OptomalJ:模式如何将UML模型转换为高质量的J2EE应用。

4参见Compuware白皮书“OptomalJ:模式如何将UML模型转换为高质量的J2EE应用。

5参见Compuware白皮书“OptomalJ:动态同步如何确保模型的代码的一致性”。

6参见Compuware白皮书“OptomalJ:如何集成部署易于测试”。

7参见Compuware白皮书“OptomalJ:如何集成部署易于测试”。

8参见Compuware白皮书“OptomalJ:模式如何将UML模型转换为高质量的J2EE应用”。

9参见Compuware白皮书“OptomalJ:模式如何将UML模型转换为高质量的J2EE应用”。

10参见Compuware白皮书“OptomalJ:模式如何将UML模型转换为高质量的J2EE应用”。

使用模型驱动开发(MDD)的十五个理由

什么是模型驱动开发(MDD)?为什么使用MDD?本文将回答这些问题,告诉您在软件项目中使用模型驱动开发的十五个理由。 AD: 【51CTO译文】什么是模型驱动开发(...
  • yczz
  • yczz
  • 2015年08月14日 10:54
  • 3428

如何“谨慎”使用“数据驱动”的风控模型(一)-- 数据篇

如何“谨慎”使用“数据驱动”的风控模型(一)-- 数据篇            人工智能时代来临,2017年“数据驱动”在整个信贷生态圈热度陡增,无论是金融机构、助贷机构、征信机构、大数据厂商等,...
  • xinshucredit
  • xinshucredit
  • 2018年01月02日 10:45
  • 156

使用事件驱动模型实现高效稳定的网络服务器程序

使用事件驱动模型实现高效稳定的网络服务器程序 几种网络服务器模型的介绍与比较 围绕如何构建一个高效稳定的网络服务器程序,本文从一个最简单的服务器模型开始,依次介绍了使用多线程的...
  • u011244446
  • u011244446
  • 2016年08月25日 11:36
  • 573

Windows 驱动模型的发展历史

直接从win95/98说起,因为之前的系统基本上没有保护模式的概念,程序员可以直接修改任意内存的数据。在95/98中采用的内核开发模型是VxD(虚拟设备驱动),在dos时期,程序认为它们拥有系统的一切...
  • swanabin
  • swanabin
  • 2014年11月22日 15:01
  • 1232

Linux USB 驱动开发(二)—— USB 驱动几个重要数据结构

前面我们学习了USB 驱动的一个描述符,下面来学习 USB 驱动的几个重要数据结构 一、struct usb_interface  接口函数 [cpp] view plain copy ...
  • u012719256
  • u012719256
  • 2016年10月21日 10:47
  • 805

linux网卡驱动开发一之网卡子系统模型

自己感觉前段时间的学习,一直是东一榔头,西一棒子,所以决定听“赵磊”大哥的话:这个世界太浮躁,需要静下心来做点儿学问。于是,哥们鼓起勇气开始分析linux内核中的DM9000驱动程序 1.网...
  • Jkf40622
  • Jkf40622
  • 2014年10月11日 15:17
  • 584

Linux设备驱动模型之platform(平台)总线详解

https://www.cnblogs.com/deng-tao/p/6026373.html https://www.cnblogs.com/deng-tao/p/6026373.html ...
  • STN_LCD
  • STN_LCD
  • 2017年12月07日 16:46
  • 72

二值分类模型的评价指标

本文简单、扼要的介绍了二值分类模型的评价指标:Precision, Recall, F-Score, ROC and AUC....
  • gls_liujia
  • gls_liujia
  • 2016年11月30日 08:57
  • 1229

DDD领域驱动模型设计

背景使用DDD开发大概也有五个月的时间了,由于当时公司导师的推荐,第一次接触DDD领域驱动到现在彻底迷恋这种开发的模式,为其思想的奥妙所折服,一直以来,总想花一点时间来总结一下,正直光棍节(天猫狂欢购...
  • u010870518
  • u010870518
  • 2015年11月11日 17:37
  • 6754

字符设备驱动、平台设备驱动、设备驱动模型、sysfs的比较和关联

学习Linux设备驱动开发的过程中自然会遇到字符设备驱动、平台设备驱动、设备驱动模型和sysfs等相关概念和技术。对于初学者来说会非常困惑,甚至对Linux有一定基础的工程师而言,能够较好理解这些相关...
  • fivedoumi
  • fivedoumi
  • 2016年03月17日 14:52
  • 2199
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:模型驱动开发(二)
举报原因:
原因补充:

(最多只允许输入30个字)