一顿操作猛如虎 “模型驱动开发”了解一下

前言导读

  当下企业软件应用开发面临着需求复杂多变、新的需求和系统不断增长,软件系统变得越来越复杂,普通的软件开发方式难以快速满足用户需求。为了解决这些问题,就出现了很多新的方法,其中最突出的一个就是模型驱动开发 MDD (Model Driven Development)。
  基于高度业务模型驱动开发MDD,通过使用高度抽象的领域业务模型作为构件,完成代码转换实现或各种模型驱动引擎配置支撑,降低开发成本,应对复杂需求变更。其基本思想是让开发中心从编程转移到高级别抽象中去,通过模型转成代码或其他构件来驱动部分或全部的自动化开发。它主要为了解决软件的两个根本危机:复杂性和变更能力。

关键词解读

  说到模型驱动开发就不得不先了解几个相近的概念;
  模型驱动架构(MDA,Model Driven Architecture)
  MDA 是由国际对象管理组织(OMG,Object Management Group)于2001年7月提出的基于MDD形式化后的模型驱动架构。
  为了实现MDA的三大目标:轻便可移植性、互操作性和可重用性,采用了模型和技术分离的架构设计。使用一定的建模标准(UML、MOF、XMI等)构建描述应用程序或集成系统的业务功能和行为的模型,这些模型独立于具体平台并且和实现具体业务功能和行为的特定技术代码分离,从而实现了业务和应用程序逻辑与底层平台技术的分离,这种分离也带来了应用程序的核心与技术变化周期的隔离。系统的业务部分和技术部分都可以各自进化而互不影响 - 业务逻辑响应业务需求,技术部分按业务需要利用新的技术开发。

  上图为MDA 结构示意图。最左侧为OMG提出的架构理论,其次是 MDA 的核心技术:MOF ( Meta Object Facility ,元对象设施)、 CWM (Common Warehouse Metamodel ,公共数据仓库元模型)和 UML . MDA 的主要工作就是要把基于这些技术建立的PIM 转换到不同的中间件平台上,得到对应的 PSM .PSM中给出的是目前主要针对的实现平台:CORBA 、 XML 、JAVA 、 Web Services 和 .NET .显然,随着技术的发展,这个列表将不断扩充。最后是基于PSM平台相关模型在公共服务及垂直领域等组件或应用中进行模型驱动开发。
  领域驱动设计/模型驱动设计(DDD,Domain-Driven Design)
  DDD是由Eric Evans最先提出,目的是对软件所涉及到的领域进行建模,以应对系统规模过大时引起的软件复杂性的问题。整个过程大概是这样的,开发团队和领域专家一起通过通用语言(Ubiquitous Language)去理解和消化领域知识,从领域知识中提取和划分为一个一个的子领域(核心子域,通用子域,支撑子域),并在子领域上建立模型,再重复以上步骤,这样周而复始,构建出一套符合当前领域的模型。
  建模的过程是由不同阶段的成员来完成,有些模型之间有引用关系,应用软件通过所有人的建模工作而构建起来。

  模型驱动开发(MDD, Model Driven Development)
  MDD 上面简介中已经解释过的,这里讲名词放在一起便于对比。
  模型驱动开发框架(MDF, MDD Framework)
  MDF 实际上就是一套开发框架,可以是基于spring、spring boot 等技术开发框架搭建的脚手架,承载了模型驱动相关的设计、开发方法等的编码框架。
  那么对于上面几个概念之间的关系是怎么样的?
  MDA环境下的系统开发方式就是在开发活动中通过创建各种模型精确描述不同的问题域,并利用模型转换来驱动包括分析、设计和实现等在内的整个软件开发过程。
  不难看出MDA说的是整体的软件架构设计使用的是模型驱动;而在软件开发的过程中,对不同领域的业务需求进行分析、抽象建模和技术框架分层所常用的分析方法就是DDD;整个软件的开发活动就称之为MDD。

新体验 MDD-MDF

  整个的模型驱动开发的目的就是为了解决软件的复杂性和变更能力,从而达到软件编程工业化产出的目的。

  传统的瀑布式开发流程如下图,每一个需求的产生都需要进行需求分析、设计、编码、测试等一系列流程。

  模型驱动框架的开发流程如下图

  对比上面两图可以了解到模型驱动的优势在于不用为每个需求定制化的编码,而是通过高度抽象化的模型映射到具体的业务元数据上来实现需求功能;这样大大减少了编码的重复工作,同时也提高了软件的可变更性。

  MDA架构设计中,MDA需要从需求采集和理解业务需求开始;PIM和PSM可以由不同团队完成,独立工作,但是组合后能产生健壮的业务解决方案;整个流程中模型转化和相关模型的驱动引擎是核心。
  接下来重点了解一下我们的MDD的脚手架(MDF)都做了什么?
  在脚手架中主要的是通过元数据SDK、规则SDK、UI元数据SDK和其他相关支持工具包完成对整体的模型驱动开发支持的。其中元数据SDK包含业务元数据的建模、数据查询等相关功能;UI元数据SDK包含了UI模板定义查询相关功能,搭配Node的前端驱动项目进行UI模板的渲染和组件的过滤展示等;而规则SDK包含了对于业务数据CRUD的默认规则、编码规则、唯一性校验规则、参照查询规则以及卡片翻页等默认规则。接下来让通过一个更完整的图来看MDD开发脚手架。

  首先,需求输出到开发阶段,根据需求设计抽取定义业务元数据,及页面设计的UI元数据。
  其次,业务元数据通过XML或统一中央元数据仓库的形式加载到脚手架项目启动中。
  再次,浏览器访问node前端,node前端路由请求到java后端Controller.
  最后,后端处理逻辑在规则执行引擎中执行相应的规则,分别查询UI元数据用于页面渲染,以及业务数据的查询。并将结果返回给node前端做渲染展示。
  目前脚手架功能中部分扩展功能上图没有体现,这些扩展功能包括:
  a. UI元数据查询逻辑通过规则引擎查询,可通过增加前置或后置规则进行功能扩展;UI元数据支持远程获取;
  b. Redis 是否使用可通过开关配置。并支持单机模式,哨兵模式,集群模式配置;
  c. MySQL数据库支持规则、UI元数据和业务数据区分不同的数据源存储;
  d. 支持Ali OSS 存储;
  e. 支持基于ES的参照及翻译;
  f. 接入统一三方包管理和统一异常及日志;
  g. 支持MySQL、Redis、应用基本信息、环境信息等的健康检查与监控;
  以上就是MDD的基本实现原理和功能描述,整体看上去还是很简单清晰的。

总结展望

  下面通过下图表达一下模型驱动开发的优势

  模型驱动开发在企业应用开发过程中,通过把基础服务及各领域当作独立的问题域,分别进行需求分析和抽象建模搭载模型驱动脚手架提供基础支撑服务或领域通用服务,再通过部分个性化业务的建模实现等提供的个性化能力 构成整个的企业应用。
  当下及未来的企业应用开发使用MDD, 不仅可以通过重用模型来提高开发效率,对于需求的复杂多变由模型驱动的可扩展性和多态来应对。并且对于整个应用的统一规范、统一管理和标准化的文档输出提供更加便捷的途径。例如,以前需要开发十几个表单页交互的情况,现在使用模型驱动开发,再也不需要996,轻轻松松完成开发,早点下班回家带娃!!!还在犹豫什么,赶快来尝尝鲜吧~

原文地址:https://blog.51cto.com/14084875/2420220

时间: 2024-08-03 05:19:24

一顿操作猛如虎 “模型驱动开发”了解一下的相关文章

Java匹马行天下之一顿操作猛如虎,框架作用知多少?

流行框架: 框架就是开发人员定义好的一套模板,程序员只需要往模板中添加响应的代码即可,填完代码,项目就完成了.所以框架存在的意义以及我们学习框架的目的就是想办法能够让程序员快速的完成整个项目的开发.下面我来对各大流行框架做个梗概: Struts 先说第一个框架Struts,它是干嘛的,原来我们写Servlet的时候不停的用Request,Response进行读取数据传输数据这样的操作,那么Struts可以让我们能够快速的完成数据的交互,但Struts也有缺点,它的整个框架的体量是比较大的,所以目

模型驱动开发的小尝试有所收获,一起分享

现在互联网上太多这样所谓的快速开发平台,但怎么个快速法?什么样原理?普通开发者如何使用? 都太笼统了,大多我最后也弄不明白,没那么执着.我只能来讲讲自己的这个基于模型驱动开发的小程序. 正所谓无图无真相,我敢紧截了一个图上来.下图是很常见的组织.用户.角色.权限的管理界面.这界面里一共有六张数据库表,在这里可以对六张表进行增.删.改.查.在各种操作表单中有文本框,单选,选择,树型单选.多选,列表单选,多选.这些功能你需要多少时间来实现呢?再加上测试.BUG修复增加不少工作量吧? 以上所说还仅仅是

嵌入式C编程经验 之 全局变量猛于虎

/********************************************************************************* * Filename: 一线研发之声:嵌入式C编程经验 之 全局变量猛于虎 * Author:SedateFire          E-mail:[email protected] * Version:1.001                 Time: 2012-01-05 * key: 嵌入式  os-less  全局变量 

直接操作游戏对象C#游戏开发

直接操作游戏对象C#游戏开发 2.2.3  直接操作游戏对象 在Inspector视图里通过设置属性而改变游戏场景中游戏对象的状态,太过抽象,毕竟数字并不够直观.其实,改变游戏对象的状态,完全有最最直观,最最简单的方法,那就是在Scene视图里,直接使用鼠标操作游戏对象直接操作游戏对象C#游戏开发本文选自C#游戏开发快速入门大学霸. 在Unity的左上角,有个工具栏,它显示了4个按钮,如图2-10所示.分别表示拖动Scene视图.改变游戏对象的位置.朝向和大小直接操作游戏对象C#游戏开发本文选自

mysql8.0安装好后无法启动后的一顿猛如虎操作

mysql8.0安装好后可以正常与navicat通信,也可以可以通过密码进入,在任务管理器中能看到mysqld字样 那么问题来了,用net start mysql 命令竟然无法启动 按照网上正常的步骤来操作: 以管理员身份在mysql的bin目录下        1.mysqld --initialize:作用初始化 2.mysqld -install:作用安装mysql服务 3.net start mysql:启动mysql服务      得到如下结果 4.net start mysql80 

小程序开发工具教程汇总,亲测无需代码,简单操作,可二次开发!

制作小程序要简单点,开发的方式简单点.所以!不得不扒一扒这款开发工具某即速应用,无需代码,简单操作,还可套用模板快速生成小程序代码包,支持二次开发.当然市面上还有很多款小程序编辑器,但大部分还是那种开发接单的,水太深了,交不起学费,还是自己来琢磨吧!大家有什么好的小程序工具类可以分享给我! 以下将我网上参与学习培训总结的一些资料文档分享出来,供大家参考学习.特别是不懂代码的朋友,这款开发工具还是可以试试的!容易上手! 当然首先,我们还是要先下载:最新版的微信开发者工具(方便进入代码二次编辑) 接

day7 操作excel 操作redis 简单的接口开发

操作excel: 读excel:xlrd  安装命令 pip install xlrd import xlrd book = xlrd.open_workbook('app_student.xls') #打开一个excel sheet = book.sheet_by_index(0) #获取第一个sheet页 # sheet2 = book.sheet_by_name('shee1') # print(sheet.cell(0,0).value) #指定sheet页里面行和lie获取数据 # p

JEPLUS平台Excel批量导入的操作配置——JEPLUS软件快速开发平台

JEPLUS平台Excel批量导入的操作配置 JEPLUS平台支持Excel数据的批量导入,但是很多客户不明白批量导入怎么配置,今天这个笔记就简单说一下JEPLUS的Excel数据批量导入怎么来配置. 一.效果展示 二.Excel数据批量导入操作的配置过程 1.添加Excel数据批量导入操作需要的按钮 找到目标功能,添加业务需求说需要的按钮,操作如图: 2.为新添加的按钮编写业务所需要的JS事件 Excel数据批量导入时应该按照平台规定的模板来添加,首先还是为"下载模板"这个按钮添加J

jeecg入门操作—树型表单开发

树表类型表单 表单创建,基础配置如下: 1.设置表单类型为:单表; 2.是否树选择:是; 3.设置特殊字段:[树形表单父id][树开表单列] 结果测试 原文地址:https://www.cnblogs.com/dyh004/p/10703699.html