首先设定一个基本的讨论背景,如图1。它表现了模型驱动应用所处的典型情景,显示了信息技术(左侧)与业务(右侧)之间的鸿沟,包括它们各自的抽象层级系统(呈现为两个方向相反的金字塔)。模型驱动应用基于人可理解/操作且计算机可处理的中介模型,跨越鸿沟,对业务领域和计算机领域建立连接(参看Situation
for Discussions about MDApps及此文)。本文将主要基于这一背景,对“模型驱动应用”概念进行讨论。近十多年来,我们一直使用类似的词语,包括企业模型驱动应用,模型驱动应用或信息系统等,并没有见到其它相似用法的明确定义[1];在近期发布的论文[2]中,对此做了专门界定。本文建议,模型驱动应用(英文model-driven
application, 缩写为MDApp)这一词语,作为专门的术语,主要用于两种含义:一种是指特定的系统类型,另一种指与此类型相关的理念、架构(architecture)、途径或相应的研究领域或知识体;在英文表达中,参照诸如“信息系统”(Information
Systems)一词的用法,对后者主要使用复数形式(model-driven applications,
MDApps)。
图1:一个讨论模型驱动应用的情境
模型驱动应用系统
根据论文[2]中的定义,模型驱动应用就是一种模型驱动系统,其功能与行为基于或受控于可演变的应用模型,而这些模型的对象就是应用的对象。这个定义是建立在更一般化的概念,即模型驱动系统和模型驱动机制(MDS
& MDM)上,它们为模型驱动应用提供了构造性的准则。这一概念的理解涉及三个关键词。
第一个是应用模型(applied model),它定义于模型驱动机制,“应用”意味着该模型作用于应用系统之中,并且其对象(即模型所表达的对象,参见此文)就是用户要通过该系统处理的事物,控制相关的系统系统功能或行为而不是直接对它们建模。
第二个是对象(target),在这双重使用:一是对应着应用模型,一是对应着应用系统,它们指向相同的目标事物;换言之,系统的作用对象就是应用模型表示的对象。例如,一个模型驱动的货仓应用系统,其对象可包括仓位、货品、存货、交货单、交货流程等;那么,这个系统的应用模型就将包括仓位模型、货品模型、存货模型、交货单模型、交货流程模型[3]。
第三个是应用模型的可演变性(evolutionary),即系统运行于应用模型上,同时应用的用户可以在系统运行中,即运行时(runtime),对应用模型进行添加、修改、清除。这意味着系统能够通过使用者对应用模型的更新而适应(adapt)其应用对象的变化。例如,如果需要系统处理某种单据,就需要在应用模型中创建它的模型;而当我们想要改变它的格式,就必须为它创建新的模型,或者对现有的模型做出修改。
此外,按照TOGAF 9 [4]定义,应用(application)是“支持业务功能与服务的,部署并运行的IT系统”。根据这个定义,模型驱动应用可表述为,部署并基于业务(中的事物)模型运行的IT系统,其应用对象就是业务(中的事物),这些事物的模型就是应用模型。
建立一个模型驱动应用的基本构造已经被识别和提炼出来,这就是模型驱动机制。在此基础上,可以设计和实现各种不同的实际系统。对真实的软件来说,模型驱动机制中的操作装置可能划分成几个不同的模块,例如建模器(建模工具)、模型驱动器(引擎)、作业器(或功能引擎)等。图2显示了这样一个模型驱动应用的初步结构,这样的软件系统,可称为模型驱动应用平台(platform)。
图2:一个基本的模型驱动应用结构(根据[2]
Fig. 4.)
在实践中,真实的企业/业务应用平台设计通常比图2复杂得多,并且可能结合其它的架构风格,例如SOA,以及运用许多互相关联的模型驱动机制结构,即多重模型驱动机制。无论如何,模型驱动机制都是决定模型驱动应用关键特征所必需的核心构造。
概括地说,模型驱动应用就是运行于可演变的应用对象模型之上的计算机应用,这种模型称为应用模型。它最重要的特征是对用户的,即其所支持的功能/操作与应用对象事物(业务)的联系建立在这些事物的模型上[5],而这些模型可以由用户在系统运行中更新。这一特征可以概括为“模型即所能”,或参照耳熟能详的短语WYSIWYG,表述为
"what you model is what you handle" (WYMIWYH;要处理什么就对其建模)[6]。客户从软件供应商那里购买的不再是带着所谓“最佳实践”的业务解决方案,而仅仅是业务支撑平台和工具,客户的业务及其独特的需求则反映在属于他们自己的应用模型之中,所以,对具体客户而言,模型就是应用。
值得留意,应用模型的对象事物也可以是系统自身(或其部分),例如用户接口(UI)、外观、配置或结构等等;运行于这种模型之上(即反射,reflection),可能尤为软件架构师或程序员关注,对最终用户,这当然也是极其重要的特性,然而,模型驱动应用最有意义的贡献,无疑是基于系统外(常称为现实世界)事物的模型,而与面向固定业务功能设计的常见应用相比,这个“小小的”差异,会导致整个应用生命周期及生态系统的巨大区别。
模型驱动应用理念
在实践中,模型驱动理念具体表现为一种强壮的富架构(architecture),参见MDApps
vs. MDA and OO: from an Architectural Perspective,Architecture(架构/体系结构)与营造法式:一个简单的理解等文。由企业应用探索十五年之路线图可窥见,在模型驱动应用背后,有一系列协调一致的原理。
与近几十年流行的观点相比,它实际上反映了一个完全不同的计算机应用“世界观”。这需要更详细的阐述。在论文[2]中(第二章),对此有一个初步的陈述。更多的相关讨论如
- Situation for Discussions about MDApps
- Human, Computer, the Real World, and Inevitable
Mediating Model
- Model-Dependent Realism: Is This the Worldview of
Software Engineering?
- Three Spaces for Entities and Models of Applications
- Abstraction (III) Make Long Story Short
一个模型,从认知架构到信息系统架构及认知结构三角模型及映像、模型与理论概念开放的世界与有限的模型;等等。
这些讨论看起来很零散,但背后有一副完整的图画。
最后,正如TOGAF和图1(Situation)所设,本文的讨论基本上在企业/业务应用的语境中展开,这也一直是我们发现和探讨这个话题的出发点。然而,我们也发现,这些理念和原理具有更广泛的意义,例如,对于最一般意义的信息系统概念,或智能。
[1] 对术语"model driven application",所见唯一基本相同的使用,是H?vard
J?rgensen于2009年在博客上发出的Principles for Model-Driven Applications一文和几篇相关文章。通过互联网搜索的其他结果,大都属于模型驱动开发(例如:model-driven
application development)这一类的含义。
[2]Yu, Tong-Ying. "Model-Driven
Applications: Using Model-Driven Mechanism to Bridge
the Gap between Business and IT." InAdvances and
Applications in Model-Driven Software Engineering. Díaz,
V.G. et al. eds. IGI Global, August 2013. (参见:模型驱动应用(MDApp):以模型驱动机制跨越业务与信息技术鸿沟)
[3] 在面向对象(OO)支配的时代,必须区别应用模型与OO中的类与对象。经验上,OO架构师很容易看到其中相似的方面而忽略其差异——而关键之一却正在于此。
[4] The Open Group. "TOGAF (R)
Version 9." Online:http://pubs.opengroup.org/architecture/togaf9-doc/arch/chap03.html.
[5] 系统的行为或操作与其目标事物的联系可以有多种方式,在这个上下文中,主要是通过人(用户)建立联系。这个话题留待专门讨论。
[6] 相比之下,现有的模型驱动工程(MDE)方法则可概括为“what
you model is what (software) you get” (WYMIWYG;要什么软件就建什么模型,参看Model-Driven
Applications vs. Model-Driven Engineering)。
|