领域知识模型企业应用系统的智慧中枢摘要:企业应用系统有海量的领域对象和丰富的领域知识,这些领域知识一般被作为领域对象的业务逻辑或规则定义。本文认为领域知识是领域模型的一个知识切面且自成体系,结合领域驱动设计[DDD]和面向方面编程[AOP]的方法,对领域知识进行建模和应用,让面向业务活动的领域应用对象只需关注业务过程的组织和管理,用AOP技术把领域知识应用到具体的业务处理策略中,使领域应用对象和领域知识对象有更好内聚性且更轻量,不仅可大幅提升它们的可管理性和复用性,而且对系统开发效率、动态业务建模和装配能力也大有益处。关键词:领域知识、领域模型、领域驱动设计、企业应用架构、DDD、AOP1.前言领域模型[DomainModel]和领域驱动设计[Domain-DrivenDesign][l]是目前在应用软件行业非常热门和前沿的话题,普遍认为这是构建高质量复杂系统最有效的方法和技术。领域模型在业界比较认可的定义是:领域模型是领域内的概念或者现实世界中对象的可视化表示,又称为概念模型、领域对象模型、分析对象模型,它专注于分析领域问题本身,领域对象是与技术无关的纯业务对象。领域建模的核心理念是把业务对象的属性、规则和职能封装在领域对象中,而不是被分散在用户界面层、应用层和持久化层中。领域建模一般情况下是从应用功能或用例[UseCase]入手,因此,领域模型中的领域对象也是直接与应用功能或用例相关的业务对象,而这些领域对象模型涉及的领域知识,一般都作为领域对象的逻辑或者规则而存在。知识是应用领域问题的本质,是特定领域中一系列业务对象共有的知识切面,这个知识切面自成体系,本文中把这个知识体系的模型称为领域知识模型,与具体应用功能或者活动相关的领域对象模型称为领域应用模型。为了便于理解这些概念,我用一个与企业管理无关的通俗的例子来说明知识模型和应用模型的关系,比如对我喜欢的台球运动进行游戏建模,美式九球模型或者英式斯诺克模型是具体的领域应用模型,球台、球、球杆、运动员等是应用领域模型的核心领域对象,但要做出好玩的仿真游戏,台球碰撞中的基本物理知识是不可或缺的,用牛顿理论作为领域知识模型就涉及到质量、速度、动量等概念和动量守恒及能量守恒模型。知识模型是高度抽象并且可独立存在的模型,也是可以在各种业务情景中复用的模型,就如前面提到的台球游戏用到的牛顿理论模型,同样可以应用到保龄球游戏以及任何一款涉及到碰撞的游戏场景。企业管理领域也同样存在大量的知识模型,本文笔者致力于把企业管理领域涉及的领域知识进行分离、建模和应用的可行性分析和实践,希望以此进一步提升大型复杂企业应用系统的质量、动态业务建模和装配能力及组件复用水平。2.企业应用系统中的领域知识问题分析企业应用系统已逐渐成为企业经营管理的一体化应用平台,面向业务流程的行业深度应用和面向业务活动的作业处理成为系统核心,系统中包含的领域知识的广度和复杂度也随之成几何级数增长,系统复杂度、弹性、可靠性和开发效率都受到前所未有的挑战。为了迎接这些挑战,技术领域方面开始广泛使用动态业务建模、产业链分层、SOA等前沿技术方案;应用领域方面则积极采用领域建模方法。动态业务建模和SOA组件装配主要是面对业务流程、活动的粗颗粒业务组件或者对象。领域建模因一般从用例[UseCase]入手而导致关注的领域对象也主要是业务流程、活动涉及到的交易记录或者账务对象。如图1所示的一种普通销售业务流程包括接单、发货、开票、收款等业务环节,涉及到的主要领域对象包括销售订单、发货单、发票、收款单等交易记录对象和信用、应收、库存、可用量、收入、成本、资金等账务对象或者模型。从表面上看这是一个完整、合理的领域模型,但是当你仔细查看这些业务对象的代码细节时,你会发现各业务对象间存在大量关于产品特性、数量计量处理、金额处理、稅额处理的重复代码,为了消除这些冗余代码,程序员可能采用抽象基类、抽取公共规则及其接口等设计方法,然而,遗憾的是这些方法都只是代码实现思维模式,没有领域知识模型与之对应,导致代码更加晦涩。该如何解决这个问题呢?応I怖收入I销客时I祈扣I...