APP下载

基于领域驱动的企业中台设计研究

2019-10-21周红林曾春生常欢欢

现代信息科技 2019年20期

周红林 曾春生 常欢欢

摘  要:领域驱动设计是国外IT圈享有盛誉并行之有效的设计法学,国内大多数的技术人员却并不了解,也未曾运用到项目实践中,可以说是知之稀少。然而微服务设计和企业中台设计,似乎让人们又重新认识和发现了领域驱动设计的价值,本文基于企业业务中台的特性,研究领域建模与信息系统设计的内在关联,梳理并编制了基于领域驱动企业业务中台设计的方法,并在项目实践中初步引用,为下一步企业中台设计提供理论基础和实践指导。

关键词:领域模型;企业中台;领域设计

中图分类号:TP311.52      文献标识码:A 文章编号:2096-4706(2019)20-0079-03

Abstract:Domain-driven design is an effective design law that is well-known in foreign IT circles. Most domestic technicians do not understand it and have not applied it to project practice. It can be said that it is rare. However,the micro-service design and enterprise mid-plane design seem to let people re-recognize and discover the value of domain-driven design. Based on the characteristics of enterprise business mid-plane,the intrinsic relationship between research area modeling and information system design,this paper combs and compiles the method of domain-driven enterprise business mid-plane design,and preliminarily quotes it in project practice to provide theoretical basis and practical guidance for the next stage of enterprise business mid-plane design.

Keywords:domain model;enterprise mid-plane;domain design

0  引  言

传统软件系统设计通常采用的是聚焦在以数据及数据样式为核心的系统建模方法。面向数据的建模方法是关系数据库理论的延续,关注的是数据表及数据表之间关系的设计,这是典型的面向技术实现的建模方法。面对日渐复杂的业务逻辑,这种设计方法欠缺灵活性与可扩展性,也无法更好地利用面向对象设计思想及设计模式,建立可重用的、可扩展的代码单元。

领域驱动设计(Domain-Driven Design,DDD)是由著名建模专家Eric Evans最早提出的综合软件系统分析和设计的面向对象建模方法,如今已经发展成为了一种针对大型复杂系统的领域建模与分析方法。它完全改变了传统软件开发工程师针对数据库进行的建模方法,从而将要解决的业务概念和业务规则转换为软件系统中的类型以及类型的属性与行为,通过合理运用面向对象的封装、继承和多态等设计要素,降低或隐藏整个系统的业务复杂性,并使得系统具有更好的扩展性,以应对纷繁多变的现实业务问题。

企业中台支撑了企业业务的数字化和企业数据的业务化,提升了企业的数字化运营能力,支撑了企业业务的灵活迭代。业务中台就是通过制定企业级的标准和机制,把企业内不确定的业务规则和流程通过工业化、市场化和IT化的手段确定下来,有效降低企业内各组织主体的沟通成本,通过中心化能力的垂直化自主发展和水平化的服务延伸,最大程度提升企業内个人、各组织主体的协作效率。其核心原则为集中管控、分布式执行,打造强大基础支撑,灵活前端触角,敏捷接受市场化的需求和变化,将企业业务能力根植到社会大环境中,增强企业核心竞争力。业务中台的核心价值在于将传统IT把业务能力IT化的模式转变为将业务能力资产化的模式,从而提高业务敏捷性及响应市场的速度,进而达到企业提质转型、降本增效的目标。

1  企业中台设计方法研究

通过对领域驱动设计的方法研究,并结合企业业务中台的特性,研究发现中台的设计过程可以分为四个步骤:首先开展业务域建模,其次基于业务建模成果开展中台规划,再次根据业务流程及功能开展服务识别与服务设计,最后则是服务实现。中台设计过程示意图如图1所示。

1.1  业务域建模

“业务域建模”是通过对业务中台所涉及到的需求业务进行业务分解及业务边界划分,形成“高内聚低耦合”的业务子域的过程。业务域的建模采用了以下几个步骤:

首先,采用用例建模进行业务需求的收集及分析,用例建模的最主要功能就是用来表达系统的共性需求或行为。该阶段产出“用例模型”,包括“用例”及“用例描述”。

其次,基于“用例模型”同时结合领域建模分析方法,来挖掘和分析重要的业务实体,并建立业务实体之间的关系,最终形成领域模型。领域模型包括业务实体及业务实体之间的关系。

最后,按职责对“领域模型”进行归纳,让相近的职责模型聚拢在一起从而保证职责的高内聚从而形成“业务子域”,同时明确两个子域的边界,保证域之间的低耦合,最后形成业务域模型。

经过归纳之后的效果示意图如图2所示。

如图2所示,通过业务域的划分形成了A、B、C、D、E、F域,每个域包含相应的业务实体,比如A域包含A1、A2、A3、A4等业务实体。

另外,针对特别复杂的业务域分析,业务域还可以有层次,业务域可以再次进行向上高级别归纳,形成父级的域,也能向下细化形成业务子域。但是,无论哪个层次的业务域分析,其分析归纳方法是一样的。通常,粒度越大的域,一般都对应的组织越大,越存在跨团队沟通,所以对划清域边界的要求就越高。

1.2  中台规划

当业务域架构产出之后,中台架构的骨架初步形成,业务域基本上可以对应到相应的中台,接下来就是在这个框架上去填充内容。先根据业务流程开始对服务进行识别,从而进行服务化的架构建模,同时把服务所在的业务范围归属到相应的中台。

另外中台还可以从技术维度横向纵向抽象各个中台共同依赖的技术能力,形成技术视角的中台。比如,多个中台都需要内容发布能力,如果我们希望能提供统一的内容管理、发布、存储及挖掘的能力平台,可以形成内容发布中心。

中台架构如图3所示。

1.3  服务识别与服务设计

服务化是将企业资源以业务能力的形式组织起来,通过一定的技术架构对这些业务能力进行封装形成易于消费的服务,从而实现业务能力粒度上的重用、组装、维护和管理,灵活迅捷构筑实现特定业务目的的企业应用,服务识别与服务设计方法如图4所示。服务化降低了新业务应用的建设成本周期和风险,并使得大规模分布式架构的采用成为可能:

(1)业务能力的提供和消费方式标准化;

(2)业务能力之间的组装更灵活;

(3)应用实现更关注于业务能力粒度的重用。

重用不再限于单一系统应用内部,跨系统、跨部署的业务能力重用不再是障碍。

服务识别的主要方法是业务解析和利旧分析,识别出无状态的“高内聚松耦合”的业务能力形成服务目录。

业务解析对预设的业务目标和业务模型,从顶级业务流开始,自顶向下,从流程、数据和规则三个方面层层解析。

输入:项目业务目标、业务流程模型、业务域定义、系统上下文。

利旧分析对需要全部或部分重用的,要接入改造甚至重新建设的内外应用和系统,针对其已有设计自底向上逐步归纳。

输入:系统上下文、已有系统的流程定义、接口规范、数据模型、业务规则。

服务识别是一个渐进过程,将业务能力梳理成按业务域组织的有层次的服务目录。在此过程中会逐步调整业务流程定 义、业务规则、数据模型(主要在粗粒度的概念模型、逻辑模型层次上),甚至业务域定义和系统上下文都可能做调整,所有这些调整都是以更有效地支撑企业业务目标和愿景(如简化业务流程、提高执行力等)为根本原则,以消除冗余(识别共同活动)和增强灵活性(识别易变活动)为基本方法。

以上述过程识别出的服务,还只是备选服务,不过已经可以初步满足服务化的以下原则:

(1)无状态原则:先从业务意义业务边界上保证这一点,以支持可伸缩高可用部署,会在服务设计阶段进一步加强;

(2)高内聚松耦合:以业务能力为基本粒度,业务含义和边界清晰完整,更容易精准地描述和定义服务;

(3)业务契约先行:清晰的服务功能提供了初步的服务提供者和消费者间的契约基础,会在服务设计阶段进一步加强;

(4)业务归属清晰:按业务域的层次组织方式,易于垂直划分方便组织开发和维护,且便于以节点为单位分析调整;

(5)系统层次清晰:按业务域的层次组织方式以及服务分类,对横向的系统层次架构的设计考量提供了强力支持。

1.4  服务实现

经过服务设计,整理好了服务模型(服务目录+服务关联+服务定义),并且在对系统整体架构的逐步完善中明确了这些服务的分组分类,以及不同的服务暴露、交互场景等。现在到了真正“实现”这些服务的时候了,服务的实现要经过以下几个主要的步骤:

(1)确定服务实现技术规格。涉及一系列的技术架构主题的分析、选型之后得到的通用和特例决策。

(2)确定服务化框架。用什么产品来封装业务能力的实现,形成服务。

(3)确定实现业务能力依赖的技术产品。如使用什么规则、搜索、消息、缓存引擎,工作流和数据持久化框架等。

(4)编写、集成、组装、测试,形成应用部署交付件。要求之前服务设计阶段提出的实现指导原则能够切实落实。

(5)部署服务。要求服务应用能够便捷甚至自动地适应不同的部署目标环境之间的切换。

2  结  论

本文在研究領域驱动设计方法的基础之上,结合企业中台特性,首先通过业务域建模方法完成业务域的架构梳理和设计,然后基于业务域架构完成中台规划,并对中台的能力范围进行定义和规范,最后根据业务流程和业务内容完成服务识别和服务设计,并对照中台的范围和规范纳入中台管理。

参考文献:

[1] Vernon V.实现领域驱动设计 [M].滕云,译.北京:电子工业出版社,2014.

[2] 云栖社区.关于DDD领域驱动设计的理论知识收集汇总 [EB/OL].(2016-05-27).https://yq.aliyun.com/articles/53436.

[3] 王磊.微服务架构与实践 [M].北京:电子工业出版社,2015.

[4] Newman S.Building Microservices [M].America:OReilly Media,2014.

[5] Richards M.Software Architecture Patterns [M].America:OReilly Media,2015.

[6] Newman S.微服务设计 [M].崔力强,张骏,译.北京:人民邮电出版社,2016.

[7] 李勇.分布式Web服务发现机制研究 [D].北京:北京邮电大学,2008.

[8] 李林峰.分布式服框架原理与实践 [M].北京:电子工业出版社,2016.

作者简介:周红林(1978.02-),男,汉族,江苏泰兴人,项目经理,助理工程师,学士学位,研究方向:软件项目管理、系统架构设计;曾春生(1985.02-),男,汉族,福建莆田人,需求分析师,学士学位,研究方向:软件需求分析、系统架构设计;常欢欢(1989.10-),男,汉族,安徽宿州人,架构师,学士学位,研究方向:系统架构设计、领域建模设计。