- 浏览: 275478 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
86614009:
如何在service层,如何获取绑定到当前线程的entitna ...
使用spring的OpenEntityManagerInView -
yajunyajun2011:
好帖子 怎么没人顶呢
Java 正则表达式最大,最小匹配问题 -
xtuali:
能说明一下,你的nutch是哪个版本的吗?谢谢!
搜索引擎Nutch源代码研究之一 网页抓取(1) -
dongmusic:
需要学习这么多的东西,吐血中...
如何提高Java开发能力 -
jiminsc:
cool
LDAP 验证、添加、修改、删除(转)
有人说:今年是AJAX年,AJAX作为软件系统表现层实现技术,怎么能和改变软件开发方式的模型驱动开发模式相比呢?DSM、Together 2006等都在2006不断亮相,因此,说2006年是领域模型年一点也不过分,因为这是一个软件新旧时代的开始之年,数据库时代已经过去。领域模型时代已经来临!
过去,当我们面对一个新的业务需求时,我们总是从先建立数据表结构开始,这种面向数据表的分析设计方法已经逐步被面向模型的分析设计方法替代。
使用数据表分析需求,无法涵括项目的全部需求设计,例如系统的状态无法统一设计,最终导致每个程序员都可以直接操控系统的状态,导致整个系统状态运行混乱;使用数据表分析,还非常容易将实体表和关系混合在一起,造成分析者视觉混乱,无法正确分析出系统的真正基本实体;使用数据表分析还会导致软件系统以数据库为中心的编码架构,进而产生传统过程化编程风格,难于维护和拓展,甚至性能低下,将系统负载都集中在数据库服务器端,走上传统的大型机集中式计算模式,而不是分布式计算模式;使用数据表分析还会丧失多层结构引以为豪的中间层,回复到过去的两层结构,更谈不上设计模式应用了。
领域建模提倡的面向模型的分析设计方法,系统一开始我们就首先确立领域模型Domain Model,以及它们之间的关系,进而可以交由程序员分别实现表现层、业务服务层和持久层,通过使用Jdon Framework(以下简称JF)等模型驱动框架,结合FDD等模型驱动的工程方法,从而正确无误地、且快速高质量地完成一个软件开发过程。
下面我们从分析、设计和开发几个环节说明一下时下流行的最新软件开发模式:
MDA步骤
-
Models 建模
-
Abstraction 抽象细化。落实细节。
-
Platform 平台架构选择,J2EE还是.NET,J2EE中选择如何架构,下面案例我们是选择Struts+JdonFramework+Hibernate架构平台,所以,目前JF属于整个模型驱动开发环节中Platform部分。
-
Model transformation 模型传递,将模型设计传递为java的类代码。
-
The MDA value proposition
DSM(Domain-Specific Modeling)是在上述MDA基础上,加强平台定义映射和模型映射灵活性和自住性,不象MDA工具,一出厂这个工具就确定死了平台和技术细节。
MDA工具和DSM将模型驱动软件开发过程自动化,但是实际中,更多人工手工介入,下面展示这个过程。
论坛系统的模型驱动开发
首先,我们使用UML用例图来完整清晰地表达一下一个新系统的需求,从而才能够保证正确地建模。
比如一个论坛的简单需求如下:
从这个需求中,我们需要发现那些有一定内容的实体对象,Actor1表示用户角色,用例图可以说用来表示“什么人做什么事情”,我们只要把“事情”抽象出来,作为实体对象,可能就是我们的领域模型(Domain Model),上图中发言用例实际可理解为用户发表言论,按照“什么人做什么事情”分析方法,实际是“用户”(什么人) + “发表”(做) + “言论”(事情),我们可以总结这里的“事情“是”言论“,”言论“作为实体对象,也就是Message(消息 帖子)。
"发言"实际就是模型Message的创建,有创建必有修改,增删改查CRUD功能必会有。
“回复”实际也是Message对象的创建,只不过有父子关系罢了。使用同样的方法可以从“浏览论坛”中分析出 Forum(论坛)这个领域对象。
Forum和Message之间类关系应该是1:N的关联,我们使用如下类图表达我们的模型:
Forum和Message提取过程是建模Modeling过程,有了模型类图;通过Abstraction细化过程,有了模型初始化以及细化。
通过Model transformation 过程,有了的模型类的java代码:
package sample.forum.model public class Forum{ private String forumId; private String name; private Collection messages; //表示和Message的1:N关系(one-to-many) ..... }
package sample.forum.model public class Message{ private String messageId; private String name; private Forum forum; //表示和Forum的N:1关系(many-to-one) ..... }
|
有了这两个模型类,围绕模型的业务服务接口也便诞生,如围绕Forum的ForumService和围绕Message的MessageService:
package sample.forum.service public interface ForumService{ void createForum(EventModel em); Forum getForum(String forumId); ..... }
|
自此,我们有了领域模型类和业务服务类,使用过JF的人就会发现,Jdon框架也正是需要这两种类的确立,下面就可以使用JF快速完成Forum和Message的增删改查以及批量查询两个基本功能了,见Step By Step 开发JdonFramework应用主要步骤。
仓库系统的模型驱动开发
下面再以ERP中仓库管理系统开发为例简要说明模型驱动开发过程,仓库简单用例如下:
我们再以“什么人做什么事情”来分析仓库的用例功能,“成品入库”如何分解为“什么人做什么事情”?我们可以这样理解:仓库员(什么人)+ 录入(做) + 库单(什么事情),这样,我们提炼出实体对象“库单”;进而从“商品资料维护”功能可以提炼出“商品”模型。
“成品入库”实际是“库单”的新增,必然有“库单”的增删改查CRUD功能需求。
我们建立两个模型的类图如下:
有了类图,通过模型细化和落实,我们可以有Product等三个模型代码类,进而围绕这三个模型的业务Service接口也会产生,通过使用JF的CRUD和批量查询,我们可以快速完成仓库系统的基本功能。见Step By Step 开发JdonFramework应用主要步骤。
总结
以上通过两个简单案例说明领域模型的简单提炼过程,当然实际项目中,远没有如此简单,而且也不只是模型的CRUD功能,但是我们可以通过四色图分析方法来抓住复杂系统中的模型和业务服务功能,一般四色图的MI是使用业务服务Service实现;Description是一个域模型。
JiveJdon3.0是按照模型驱动架构思路开发的一个复杂软件系统。
如图所示:模型和业务服务是在一个系统架构之前建立的,所以没有面向模型的领域建模分析方法,就没有Domain Model,就没有模型对象,就没有中间业务层,没有中间层,就没有设计模式的使用空间。同时,没有模型对象,就没有表现层的边界对象(如Struts的ActionForm);也就没有模型对象的持久化(使用Hibernate等O/R Mapping工具),特别是在持久层使用Hibernate,最后搞个值对象VO作为数据表数据的存贮对象,很明显,对象屈从于数据表了,又在搞面向数据表的分析设计了,你这是在将汽车当自行车推了,这种对象屈从于数据表会造成如下图左边的乱糟糟结构,而右图则是因为强调了模型的统帅和领导地位,整个系统变得井井有条:
发表评论
-
哈希表的ELFhash算法
2011-12-09 10:25 1286算法: while(*key)//遍历字符串 ... -
有理想的程序员必须知道的15件事(转自CSDN)
2011-07-21 21:23 573作为程序员,要取得非凡成就需要记住的15件事。 1.走一条不 ... -
每天写出好代码的5个建议(转自CSDN)
2011-07-21 21:18 537成为一个优秀的程序员 ... -
程序员技术练级攻略(转自CSDN)
2011-07-21 21:05 943导读:本文是由陈皓和 ... -
学android开发 不得不去的好地方
2011-07-06 17:08 825中国移动开发者社区 h ... -
ppt制作
2011-04-04 18:50 851PowerPoint的动画效果比较多,但图片只能一幅一幅地动作 ... -
Java 虚拟机体系结构
2011-02-22 10:11 743众所周知,Java源代码被编译器编译成class文件。而并 ... -
提高程序运行效率的方法
2011-02-22 09:36 784浏览器发送一次请求 ... -
从JVM内存管理的角度谈谈静态方法和静态属性
2011-02-22 09:27 637作者 robbin (htt ... -
实战DDD(Domain-Driven Design领域驱动设计)
2011-01-14 15:30 8072004年著名建模专家 ... -
领域模型驱动设计(DDD)之模型提炼
2011-01-14 15:30 779当Java世界提供的可 ... -
模型驱动设计(MDD)之灵活设计
2011-01-14 15:29 614灵活设计可以使我 ... -
JAVA开发者应该去的20个英文网站
2011-01-14 10:35 570http://www.javaalmanac. ... -
对代理模式与Java动态代理类的理解(三转)
2010-12-30 10:56 800文章分类:Java编程 1. 代理模式 代理模式的作 ... -
Java httpclient解决方案中的中文传递
2010-12-27 09:39 21221 Commons HttpClient 开源项目简介 Htt ... -
java字符串的各种编码转换
2010-12-26 19:57 807import java.io.UnsupportedEncod ... -
firebug的使用
2010-12-26 11:13 731什么是Firebug 从事了数 ... -
HttpClient 学习整理
2010-12-13 09:32 721HTTP 协议可能是现在 Internet 上使用得最多、 ... -
JAVA使用java.net.url模拟登录
2010-12-08 13:32 1447有的时候,会需要使用java的程序访问网页,正常的访问网页的程 ... -
面试知识点
2010-12-06 10:54 1044总结了一些要弄懂的知识点:JVM的构造框架,TCP的三次握手, ...
相关推荐
模型驱动的软件开发模式研究.pdf
非常有用的试题,尤其针对模型驱动开发这门课程,大家可以下载看看
了解软件开发方法学在面向对象软件开发方法之后的最新发展趋势与关键技术,如基于构件,面向特征,面向特征等技术。
领域驱动设计与模型驱动开发,slideshare 搬运而来,非常不错
模型驱动模型
为什么要使用模型驱动开发工具 PowerDesigner 简介 PowerDesigner 与业务流程建模 PowerDesigner 与对象建模 PowerDesigner 与数据建模 PowerDesigner 与XML建模 PowerDesigner 的共同功能 PowerDesigner 10.0 的新...
模型驱动开发的误解和挑战
模型驱动的方法部分提高了开发人员的生产力,降低了软件构建的成本,提高了软件的可重用性,并使软件更易于维护。 本文研究了将模型驱动的软件开发与软件产品线(SPL)集成在一起的方法。 自2014年以来,该SLR进行...
:为了解决传统嵌入式数控系统开发中出现的各种问题,提出并实现了一种嵌入式数控系统模型驱动开发方法,该 方法以模型为中心,主要包括领域建模语言构建、模型转换、代码自动生成3个部分。为了实现对数控系统全面而...
模型驱动软件设计课件(UML),全面完整,其中还有一些MDA的知识,对朋友们有很好的帮助。
软件开发项目管理模型 软件开发项目管理模型
基于模型驱动的软件开发方法.ppt
随着模型驱动体系结构(model driven architecture,MDA)技术和环境的不断发展,模型驱动软件开发(model driven development,MDD)已经成为一种新的软件开发模式,对于MDD软件开发过程中的核心问题,即面向不同...
基于模型的软件开发 ,比较系统的一本书,希望对你有用
SOA与MDA的结合是现代软件开发理论与方法的主要发展趋势,其实现的关键在于正确地服务建模、应用敏捷开发技术来实现模型驱动。结合SOA和MDA,融入迭代开发方法,提出了一种基于SOA的模型驱动快速开发架构——SMRDA。...
模型驱动开发(MDD:Model-Driven Developement)是更伟大视景MDA 中的一部分。MDA 是模型驱动体系架构(Model-Driven Architecture)的简称,由对象管理组织OMG(Object Management Group)所驱动。MDA 表示了一种...
领域驱动设计和开发实战, 学习领域模型,对代码架构设计有很的思想指导
相比传统软件开发,模型驱动开发(MDD)的软件项目中,应用程序被指定为一个更高层次的抽象模型。通过对模型的解释/执行或产生的代码,抽象模型会自动转化为可工作的软件应用。