`

模型驱动软件开发实战步骤

阅读更多

  有人说:今年是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用例图来完整清晰地表达一下一个新系统的需求,从而才能够保证正确地建模。

  比如一个论坛的简单需求如下:

usecase

  从这个需求中,我们需要发现那些有一定内容的实体对象,Actor1表示用户角色,用例图可以说用来表示“什么人做什么事情”,我们只要把“事情”抽象出来,作为实体对象,可能就是我们的领域模型(Domain Model),上图中发言用例实际可理解为用户发表言论,按照“什么人做什么事情”分析方法,实际是“用户”(什么人) + “发表”(做) + “言论”(事情),我们可以总结这里的“事情“是”言论“,”言论“作为实体对象,也就是Message(消息 帖子)。

  "发言"实际就是模型Message的创建,有创建必有修改,增删改查CRUD功能必会有。

  “回复”实际也是Message对象的创建,只不过有父子关系罢了。使用同样的方法可以从“浏览论坛”中分析出 Forum(论坛)这个领域对象。

  Forum和Message之间类关系应该是1:N的关联,我们使用如下类图表达我们的模型:

class

  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);
  void updateForum(EventModel em);
  void deleteForum(EventModel em);

  Forum getForum(String forumId);

  .....

}

 

  自此,我们有了领域模型类和业务服务类,使用过JF的人就会发现,Jdon框架也正是需要这两种类的确立,下面就可以使用JF快速完成Forum和Message的增删改查以及批量查询两个基本功能了,见Step By Step 开发JdonFramework应用主要步骤。

仓库系统的模型驱动开发

  下面再以ERP中仓库管理系统开发为例简要说明模型驱动开发过程,仓库简单用例如下:

仓库用例

  我们再以“什么人做什么事情”来分析仓库的用例功能,“成品入库”如何分解为“什么人做什么事情”?我们可以这样理解:仓库员(什么人)+ 录入(做) + 库单(什么事情),这样,我们提炼出实体对象“库单”;进而从“商品资料维护”功能可以提炼出“商品”模型。

  “成品入库”实际是“库单”的新增,必然有“库单”的增删改查CRUD功能需求。

  我们建立两个模型的类图如下:

class

  有了类图,通过模型细化和落实,我们可以有Product等三个模型代码类,进而围绕这三个模型的业务Service接口也会产生,通过使用JF的CRUD和批量查询,我们可以快速完成仓库系统的基本功能。见Step By Step 开发JdonFramework应用主要步骤。

总结

  以上通过两个简单案例说明领域模型的简单提炼过程,当然实际项目中,远没有如此简单,而且也不只是模型的CRUD功能,但是我们可以通过四色图分析方法来抓住复杂系统中的模型和业务服务功能,一般四色图的MI是使用业务服务Service实现;Description是一个域模型。

  JiveJdon3.0是按照模型驱动架构思路开发的一个复杂软件系统。

mda

  如图所示:模型和业务服务是在一个系统架构之前建立的,所以没有面向模型的领域建模分析方法,就没有Domain Model,就没有模型对象,就没有中间业务层,没有中间层,就没有设计模式的使用空间。同时,没有模型对象,就没有表现层的边界对象(如Struts的ActionForm);也就没有模型对象的持久化(使用Hibernate等O/R Mapping工具),特别是在持久层使用Hibernate,最后搞个值对象VO作为数据表数据的存贮对象,很明显,对象屈从于数据表了,又在搞面向数据表的分析设计了,你这是在将汽车当自行车推了,这种对象屈从于数据表会造成如下图左边的乱糟糟结构,而右图则是因为强调了模型的统帅和领导地位,整个系统变得井井有条:

ddd

分享到:
评论

相关推荐

    MDA模型驱动架构教程

    MDA(Model Driven Architecture,模型驱动架构)是一种软件开发方法论,由OMG(Object Management Group,对象管理组织)提出,旨在通过模型的抽象层次提高软件开发的效率和质量。MDA的核心思想是将软件开发过程中...

    《电机应用开发实战指南—基于STM32》.pdf

    电机开发实战指南中还详细介绍了直流有刷电机的工作原理,以及驱动设计与分析。直流有刷电机的控制实现部分着重于速度控制的原理和方法,并通过硬件设计、软件设计以及下载验证的流程来完成整个控制系统的搭建。 ...

    大三下复杂软件的设计之道:领域驱动设计.pdf

    在DDD中,模型不仅仅是软件开发中的一个步骤,而是持续与开发团队互动的工具,这种互动以“通用语言”为桥梁,它是一种双方都能理解的术语集,确保了领域专家与软件开发人员之间的沟通。 为什么使用DDD呢?DDD的...

    Windows.7设备驱动程序开发

    驱动程序的开发对于优化硬件性能、提升系统稳定性以及确保软件兼容性至关重要。 驱动程序开发涉及多个层面,包括: 1. **驱动程序模型**:Windows 7支持多种驱动程序模型,如WDM(Windows Driver Model)、KMDF...

    基于大型语言模型的预训练实战.zip

    大型语言模型预训练实战是一个深度学习领域的热门话题,特别是在ChatGPT引领的生成式人工智能浪潮中,这种技术已经成为推动自然语言处理(NLP)发展的关键驱动力。ChatGPT是一种基于Transformer架构的预训练语言模型...

    第11章、嵌入式Linux设备驱动开发_linux_

    在嵌入式Linux系统中,设备驱动开发是至关重要的一个环节,它连接着硬件与操作系统,使得硬件资源得以有效利用并提供...书中的实例和实战经验将有助于读者掌握设备驱动开发的全过程,提升在嵌入式系统中的实践能力。

    java开发实战1200例

    《Java开发实战1200例》是一本深入浅出的Java编程教程,涵盖了广泛的实践案例,旨在帮助读者从新手到熟练工的转变。在这个系列的第19至30章中,我们可以预见到一系列丰富的Java开发知识和技巧。下面将详细解析这些...

    测试驱动开发 by example.rar

    6. **TDD与其他软件开发方法的关系**:比较TDD与传统的软件开发模式,如瀑布模型、增量开发等,分析它们的优缺点。 7. **最佳实践**:提供实施TDD的建议,如测试隔离、持续集成等,以提升开发效率和代码质量。 8. ...

    驱动程序开发

    驱动程序开发的动机多样,但核心目的主要包括:满足特定硬件的驱动需求、提高软件与硬件的兼容性、优化系统性能、探索操作系统内核机制等。值得注意的是,驱动开发并非高收入职业的代名词,高薪往往伴随高水平的技术...

    架构实战——软件架构设计的过程

    在现代软件开发中,软件架构设计扮演着至关重要的角色。良好的架构设计能够确保软件系统的可扩展性、可维护性和性能等关键特性。《架构实战——软件架构设计的过程》一书深入探讨了软件架构设计的方法论和技术实践,...

    蔡工驱动开发实战之编写I2C驱动和Debug过程

    本篇主要聚焦于I2C驱动的开发实战,我们将探讨如何编写I2C驱动以及调试过程,这对于熟悉rk3399平台上的Android 7.1系统开发者尤为关键。 I2C(Inter-Integrated Circuit)是一种串行通信协议,广泛应用于嵌入式系统...

    Windows驱动开发技术详解.rar

    在Windows驱动开发中,WDM模型是一种关键的驱动框架,适用于多种类型的设备,如打印机、网络适配器、磁盘控制器等。WDM驱动由若干组件构成,包括设备驱动接口(DDI)、函数驱动(Function Driver)、筛选器驱动...

    Java软件开发实战 Java基础与案例开发详解 10-9 练习题 共5页.pdf

    它的设计目标是让程序员能够更容易地开发出稳定可靠的软件系统。 #### 1.3 Java平台的体系结构 Java平台主要分为三个部分: - **Java SE**(Standard Edition):标准版,用于开发桌面应用程序。 - **Java EE**...

    餐饮管理系统(C#开发实战宝典)

    《餐饮管理系统(C#开发实战宝典)》是一本针对C#编程语言在餐饮业管理软件开发中的应用进行深入解析的教程。这本书旨在帮助开发者掌握如何利用C#技术构建高效、实用的餐饮业务管理系统,从而提升餐饮企业的运营效率...

    USB驱动程序开发详细手册

    - **适用对象**:面向嵌入式开发人员、软件工程师以及对USB驱动开发感兴趣的个人或团队。 #### 二、学习USB的目的 - **为什么学习USB**: - USB(通用串行总线)作为现代计算机中最常见的接口之一,几乎所有的外设...

    讯为驱动开发指南-3568开发板

    根据给定的信息,本文将对《讯为驱动开发指南-3568开发板》进行深入解析,并基于其标题、描述、标签以及部分内容提取出关键的知识点。 ### 一、驱动开发基础知识 #### 1.1 学习方法 驱动开发是一项技术性强的工作...

    android源码开发实战19.03.zip

    在Android源码开发实战19.03的资料中,我们可以深入探讨Android系统的内部运作机制,以及如何利用源代码进行定制和优化。Android作为一个开源操作系统,它的源码为我们提供了无尽的可能性,从底层驱动到上层应用框架...

    android源码开发实战23.15.zip

    在Android源码开发实战中,23.15章节可能涉及了Android系统深层次的理解与定制。这个压缩包可能包含了相关的代码示例、讲解文档或项目文件,帮助开发者深入学习和实践Android系统的源码开发。以下将围绕Android源码...

    驱动编程学习 pdf格式教程

    对于初学者来说,理解驱动编程的概念和原理是迈向系统级开发的关键步骤。本教程以PDF格式提供,旨在帮助爱好者逐步掌握这一技术。 首先,我们要理解驱动程序的本质。驱动程序是软件和硬件之间的桥梁,它使得操作...

    中嵌培训教程课件设备驱动部分

    4. **驱动程序开发**:详细讲解设备驱动的开发流程,包括设备探测、初始化、数据传输、错误处理等关键步骤。以实际案例演示如何编写简单的设备驱动代码。 5. **Linux内核接口**:解析Linux内核中的设备模型,包括...

Global site tag (gtag.js) - Google Analytics