1 综述
企业资源计划(ERP:EntERPrise Resource Planning)系统集信息技术与先进的管理思想于一身,实现了对企业的采购,生产。销售,分析,决策的全面管理,已经成为当前信息化企业管理的基础。以ERP软件系统为基础,企业能够及时准确的收集数据,分析经营状况、财务状况,提高管理的效率。
随著企业管理理念的变化,当前ERP软件系统不仅要实现对企业供应链资源的全面管理,还要完成上下游企业协同工作的管理,为了实现这些功能,现在的ERP软件系统的规模一般比较庞大,例如金蝶K3 Wise 12.0标准版有八万个以上的页面组成。此外,ERP软件系统还有大量的复杂的业务逻辑需要处理。
传统的软件开发流程是先根据需求确定各个模块的功能,然后分别对每个界面上的所有元素进行设计,最后对界面的逻辑功能进行编码实现。对每个界面,及界面上的每个元素都需要单独进行设计和编码。界面上任何功能的调整,都需要对整个代码进行重新编译和发布。系统的开发效率很低,发布成本很高。
ERP软件系统的大量页面需求与页面开发的低效率产生了矛盾。传统的开发模式已经不能满足现代大型ERP软件开发的需求。为了解决这个问题,金蝶公司将领域模型应用到ERP软件建模中,提出了ERP动态领域模型的概念。
2 领域模研究现状
领域模型是对领域内的概念类或现实世界中对象的可视化表示。它专注于分析问题领域本身,发掘重要的业务领域概念,并建立业务领域概念之间的关系。
在进行领域建模时,一般先根据业务分析得到一个名词列表,然后对名词列表进一步抽象,确定业务对象实体及实体间的关系。业务对象实体要不仅反映目前的经营实体,还要给需求分析人员和系统功能提供了一定的扩展视野。接着,从业务实体集合中抽象业务模型,建立问题域的概念。最后。用使用UML提供的方法和图例进行领域模型设计、确定模型之间的关系。
中国科学院计算技术研究所的王宇等阿通过机器学习方法对信息抽取过程进行领域建模,实现了互联网信息挖掘的研究。
吉林大学的王晓燕等既使用领域模型捕获系统业务的静态需求,描述领域内业务对象之间的静态关系,建立一套软件开发框架。
华中科技大学的黄靖等通过扩展FODA(Feature-Oriented Domain Analysis)方法,将实时特征作为实时应用需求空间的一阶实体来认识和组织实时应用系统领域模型。
可以发现这些研究是以静态领域模型为基础,以名词列表为最小分析对象,因此业务对象实体的粒度较大,模型的通用性不高。
3 ERP软件建模的现状
ERP系统作为一类重要的应用软件系统,真有自己的特点,主要有两个方面:
①系统规模大,目前市场上常见的ERP系统一般都有几百个页面。
②页面逻辑相似性强。经过比较可以发现,大部分ERP页面具有类似的功能,以数据的录入,修改,显示为主。
结合ERP系统的这两个方面的特点,国内外多个组织进行了系统建模的研究,希望能够提高ERP系统的开发效率和软件质量。
合肥工业大学的吴冒等川提出了一种基于元模型的业务建模方法。对WFMC工作流过程定义元模型进行改进.扩展出了一个从组织、功能、信息、资源和过程五个个侧面对ERP业务进行描述的领域元模型。
哈尔滨理工大学的高长元等结合集成化企业建模和DEM的思想,设计了面向制造业ERP的企业建模框架,并对其中的视图维、生命周期维、通用层次维以及它们之间的关系进行了详细设计。
重庆工学院的王柯柯等网在分析UML建模特点的基础上,提出了使用统一建模语言UML对ERP系统建模。
这些ERP建模方法在其特定的环境下,部分解决了ERP软件建模的问题。但这些建模方法还是基于粗粒度的实体进行研究的,不能实现动态的构建和解析。
4 ERP动态领域建模
ERP系统规模庞大,除了要设计大量的页面外,还有复杂的工作流程,业务逻辑等需要处理。如果对每个功能模块分别进行设计、实现,必然造成开发效率低下,开发成本高的问题。
领域建模作为一种有效的应用建模方法,可以方便的将应用项目需求转化为计算机软件模型。但传统的领域建模研究对象的粒度较大,不能灵活适应动态变化的需求。
金蝶公司在分析ERP系统特点的基础上,进一步细化领域模型的对象实体,提出了ERP动态领域模型的概念,较好的解决了ERP软件开发中的一系列问题。
4.1传统的领域模型
构建领域模型一般包括如下四个步骤:
①根据业务分析列出系统中的名词列表。
②对名词列表进行抽象,得到对象实体。
③从业务实体集合中抽象业务模型,建立问题域的概念。
④使用UML提供的方法和图例进行领域模型设计、确定模型之间的关系。
确定对象实体是整个领域建模的核心问题,对象实体的抽象层次决定了最终的领域模型。
针对ERP系统,使用传统的领域建模理论有如下两种选择对象实体的方法。
①选取ERP应用的对象作为对象实体,例如:原材料、供应商、皮付款、中间件、产品、经销商、应收款等,使用这种领域模型能够很好的分析系统的各种需求。但是这种方法没有抓住不同业务模块(页面,工作流等)的共有特性,软件设计必然是以单个业务模块为单位。
②先使用第一种领域建模得到单个业务模块的概要设计,然后以此为基础,根据不同模块的特点,将相似的模块归类,以相似的模块作为领域模型的实体对象。
这种方法得到的领域模型的对象实体是模块级的,界面设计是以页面组为单位,相似的多个页面可以共用一个模型作为母板,比第一种方法有较大的改进。但是如果界面上的元素或操作发生变化,就必须重新设计界面模型,修改代码。不能实现界面在部署环境的按需动态构建。
4.2动态领域建模框架
金蝶公司的技术人员在传统的粗粒度的领域模型的基础上,以模块上的基本元素为研究对象,提出了ERP动态领域模型的概念。
动态领域建模由模型库,领域模型,领域模型动态解释引擎三个部分组成。如图l所示。
图1 动态领域建模框架
先根据多个ERP系统分别进行抽象,得到多组基本对象实体。然后对这些对象实体再进一步抽象,得到模型库(包括通用的元模型库和特定行业的定制的专用模型库)。接着使用这些模型元素构建ERP系统的功能模块,当需要加载某个模块时,使用动态解释引擎将设计好的功能转换为内存中的映射。
模型库被封装成动态链接库的形式提供给开发人员使用,动态解释引擎将设计好的功能转换为内存中的映射。开发人员可以使用Silverlight,JSP等多种形式将内存中的映射展示给用户。系统具有很好的跨平台性和兼容性。
4.3领域元模型
领域元模型是进行动态领域建模的基础。金蝶公司结合80万家ERP客户的最佳实践,建立了一套完整的ERP领域元模型。
结合ERP系统的特点,ERP动态领域模型包括模型——元素——属性三层体系结构。
图2 三层领域模型结构图
模型对应于ERP系统中模块的种类。例如页面,工作流,电子报表,算法等。每一类有自己独特的特点,需要使用不同的方法进行设计。
针对ERP系统中常见的功能模块,建立了界面模型、工作流模型、算法模型等十多种ERP领域模型,如图3所示。并根据部分特定行业的特殊要求,定制的一些专用元模型。
图3 ERP动态领域模型
ERP领域模型确定了模块的大的分类.粒度较大,还需要进一步细化。针对一个个具体的基本元素进行研究。
例如一个典型的页面的由菜单、文本输入框、时间输入框、列表、显示信息等多个控件组成。每一种控件可以看作是一个基本元素,图4是一个典型的页面包含的元素示意图。
图4页面元素示意图
在一个页而上相同种类的控件可能会有很多个,它们显示的内容和格式都可能不同。例如,一个应收单上有两个文本输入框,一个要输入应收金额,一个要输入收款单位。应收金额只能输入数字,长度20个像素。收款单位可以输入中文和英文,长度100个像素。
在金蝶ERP动态领域模型中,元素的差异性使用元素的属性来表示。每个元素都有多个可以动态修改的属性。例如文本框有类型、长度、高度、绑定的数据库字段等多种属性。
除了页面外,ERP系统中常见的多种功能模块,也都使用类似的方法进行分析,得到元模型。
例如工作流由多个动作及连线组成。可以分别抽象成元模型。动作的具体操作、执行者、条件等都作为该元模型的属性。设计一个业务流程模式后,改变动作的属性值可以根据需要设计出不同的业务流程。
再例如。设计电子报表时。在不同的场景下需要不同的计算公式,传统的方法是将具体的公式作为程序代码的一部分,这就增加了修改和维护的难度。使用动态领域建模的方法,将公式定义为一种元模型,具体的公式表达武作为该元素的属性值。可以在不需要修改代码的前提下,得到各种满足需要的公式。
4.4基于动态领域模型的业务模块设计
经过以上的步骤,元模型数据就确定了。所有的这些元模型数据的定义都是抽象的。与具体的业务逻辑无关的。
要使用领域元模型来设计具体的业务模块,先要以领域元模型为基础建立一个业务模块设计平台。这里不详细介绍该平台的建立过程。
业务模块设计平台建立后,可以使用该平台来进行具体的业务模块的设计。
业务模块的设计分为以下几个步骤:
①确定模块的需求。
②使用设计平台提供的环境,使用领域元素进行模块设计。
③分别指定各领域元素的属性,完成模块的特定需求。
④将设计好的模块保存为XML文件,以备调用。
作为一个典型的例子,使用动态领域模型设计一个具体的页面的步骤如下:
①确定该页面要完成的功能(需求)。
②将选定的基本元素(文本输入栏,列表,菜单,按钮等)放置到页面上。
③设定各元素的属性。不同的页面元素对应不同的属性值。属性值可能是页面元素的位置,长度等外观信息,也可能是校验规则,数据库字段等逻辑信息,也可能是操作等控制信息。
④将页面上的所有元素及它们的属性保存到XML文件中。
4.5模块设计的继承和组合
前面提到了使用领域建模的基本元素进行模块设计的过程。该过程是从基本元素开始的。
ERP系统中的模块很多,而且很多模块有一定的相似之处,如果能够利用设计好的模块来简化其他模块的设计将大大提高系统的开发效率。在动态领域模型中,使用继承和组合两个方法来实现这个功能。
继承就是先使用基本元素设计好一个模块。然后以这个设计好的模块为基础,增加,修改,删除部分元素,或修改部分元素的属性值来完成新的模块的设计。
图5 模块继承
被继承的模块的修改将引起子模块的自动修改。
使用继承的方法设计模块,将得到两个XML文件。一个是被继承的模块的XML文件,一个是子模块的差量XML文件。差量XML只保存子模块相对干被继承模块修改的部分。
组合是先使用基本元素设计好一个模块。然后将这个设计好的模块作为新的模块的一个组成部分来完成新的模块的设计。
图6 模块组合
一个新的模块可以包含多个设计好的模块。并且可以修改所包含的模块。例如新的模块A包含设计好的模块B和C。可以根据需要修改为包含模块C和D。被包含的模块的修改将引起最终模块的自动修改。
采用组合方法设计模块时,将得到多个XML文件,分别为被包含模块的XML文件和最终模块的XML文件。修改被包含模块的XML文件将直接引起最终模块功能的变化。
4.6领域模型动态解释引擎
经过以上的步骤,ERP系统中的模块(包括页面。业务流程。报表等)以XML文件的形式保存了起来,当要加载模块时,需要将XML文件转换为模块在内存中的映射,这部分工作由动态解释引擎负责。图7是动态解释引擎的示意图。
图7动态解释引擎示意图
动态解释引擎由展示层,服务层,内核层组成。当XML文档输入解释引擎后,内核层读取元模型数据解析XML文档,并将结果交给服务层。服务层将解析结果封装成可以在网络中传输的JSON数据包,并发送到展示层。展示层收到JSON数据包后。使用不同的方式晨示绮用户。具体说明如下:
内核层:负责根据存储的元模型数据动态解析模块XML文档。模块的种类不向,解析时使用的模型也不同。动态页面,报表等显示类的模块与业务流程等处理类模块处理方式有较大的不同。服务层:将内核层处理的结果组装成模块在内存的映射。动态页面,报表等显示类的模块转化为可以在网络传输的JSON数据包。业务流程等模块中的自动动作将直接执行,需要与用户交互的动作将转化为JSON数据包。
展示层:由一系列标准的UI控件组成,根据服务层返回的结果进行窗体控件动态创建并接受用户数据输入,完成系统与用户的交互。不同的模块给用户展示的方式不同。
4.7模块设计的扩展
使用前面介绍的基于动态领域建模的模块设计方法可以完成大部分模块的设计工作。但是可能还有一些模块的特殊功能无法实现,这部分功能使用插件的方法来实现。
例如在业务流程设计时。系统内置了大量的动作,但如果要执行特殊的没有内置的功能,就需要定义新的动作,必须使用插件来实现。
插件的设计也是基于动态领域模型的。每一种元素在系统中有相应的基类和一系列虚方法。插件就是在这些基类和虚方法及基础上通过继承的方法来扩充基本元素的功能。
一个基本元素可以定义多个插件,实现多种扩充,具体进行模块设计时,通过将合适的插件在模块上注册的方法实现不同的扩充。
将插件在系统中注册后,在解析时,将使用插件中定义的类和方法覆盖系统中的基类和虚方法,从而在不改变平台的基础上扩充功能。
5 实现
经过大量金蝶人的共同努力,已经成功的将动态领域建模应用到了ERP软件建模中。
金蝶公司结合80万家ERP客户的最佳实践,抽象出10多种ERP领域模型、365种基本元素、7000多个元素属性、上百个业务逻辑构件,并以此为基础,设计一个BOS(Business Operating system)系统。作为模型设计器和模型动态解释引擎。BOS系统已经在金蝶ERP系统开发中得到了应用。
使用动态领域建模后,ERP系统开发变成了在BOS平台上界面的设计,几乎不需要修改任何代码,而且可以很好地保持界面质量的一致性。经过简单的培训,实施顾问和最终用户都可以配置出专业的ERP应用,、
将动态领域建模技术应用到ERP应用系统开发后,开发效率大幅上升,系统的可迁移性得到了显著提高。采用这种技术前,90%的精力花费在具体页面的设计上,无法专注与ERP业务流程的设计。采用动态领域建模技术启,页面开发的时问降低为10%。开发人员90%的精力关注业务逻辑设计和系统建模。从而可以开发出更加适合企业需求的产品。
另一方面,采用新的技术后,系统开发的难度大幅下降,新员工经过简单培训就可以开始工作。同时。由于减少了代码修改的数量,系统的质量也得到了大幅提高。
6 结论
动态领域建模是对模型驱动架构MDA似(Model Driven Architecture)一设计思想一种扩展。金蝶公司在ERP动态领域建模方面进行了大量的探索和实践,经过3000家以上平台客户实践,抽象出独特的标准、行业、伙伴、客户的多层次开发模型。能够支持成果组合应用与平滑升级,形成平台批量交付能力。
动态领域模型具有以下几方面的优势:
①可以大幅提高了ERP系统的设计和开发效率,有效提升软件产品的质量。
②独特的模型解释系统,设计出来的产品具有良好的动态性。
③微内核架构设计,模型可持续发展,是一个能够自我学习和自动进行行业知识积累的智慧无模型系统。
④技术无关性,适应IT技术发展变化。
基于动态领域模型的设计方法可以推广到其他类似的大型软件系统中,具有较高的理论和应用价值。
读过这篇文章的人还读过:
4006199527