前言导读
当下企业软件应用开发面临着需求复杂多变、新的需求和系统不断增长,软件系统变得越来越复杂,普通的软件开发方式难以快速满足用户需求。为了解决这些问题,就出现了很多新的方法,其中最突出的一个就是模型驱动开发 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