DDD(领域驱动设计)是对软件所涉及到的领域进行建模,以应对系统规模过大时引起的软件复杂性的问题。而在微服务微应用蔚然成风的今天,他们共同体现的分而治之的思想,使得领域建模显得尤为重要。
一、简析DDD
1.DDD溯源
在早期开发中,领域模型就是数据库设计,但是传统的开发存在一定问题。
(1)Service层很重,所有逻辑处理基本都放在service层。
(2)POJO作为 Service 层非常重要的一个实体,因为不同场景的需求做不同的变化和组合,造成 POJO 的几种不同模型(失血、贫血、充血)。
(3)随着业务变得复杂以后,包括数据结构的变化,各个模块就需要进行修改,原本清晰的系统经过不断的演化变得复杂、冗余、耦合度高,后果非常严重。
2.DDD介绍
(1)什么是领域(Domain)?
任何一个系统都会属于某个特定的领域,同一个领域的系统都具有相同的核心业务,因为他们要解决的问题的本质是类似的。因此,我们可以推断出,一个领域本质上可以理解为一个问题域,只要是同一个领域,那问题域就相同。所以,只要我们确定了系统所属的领域,那这个系统的核心业务,即要解决的关键问题、问题的范围边界就基本确定了。
(2)什么是驱动(Driven)?
驱动是领域驱动领域模型设计,是领域模型驱动代码的实现。
(3)什么是设计(Design)?
DDD中的设计主要指领域模型的设计。DDD是一种基于模型驱动开发的思想,强调领域模型是整个系统的核心价值。每一个领域,都有对应的领域模型,领域模型能够很好的帮我们解决复杂的业务问题。从领域和代码实现的角度来理解,领域模型绑定了领域和代码实现,确保了最终的代码实现是解决了领域中的核心问题。
3.PO、BO、VO
DDD中有三个对象需要理解,分别是PO、BO、VO。
(1)PO :persistent object持久化对象
有时也被称为Data对象,对应数据库中的entity;PO中不应该包含任何对数据库的操作;PO的属性是跟数据库表的字段对应的;PO对象需要实现序列化接口。
(2)VO :value object 值对象 / view object 表现层(视图)对象
value object 值对象:通常用于业务层之间的数据传递,和PO一样仅仅包含数据。但应是抽象出的业务对象,根据业务需要选择是否与表对应;
VO(view object)表现层对象,视图对象:用一个VO对象对应整个界面的值,主要对应页面显示的数据对象,根据业务需要选择是否与表对应。
(3)BO :business object 业务对象
主要作用是把业务逻辑封装为一个对象。这个对象可以包括一个或多个其它的对象。
4.模式优势
(1)DDD能让我们知道如何抽象出限界上下文以及如何去分而治之。
分而治之 : 把复杂的软件拆分成若干个子模块,每一个模块都能独立运行和解决相关问题,并且分割后各个部分可以组装成为一个整体。抽象 : 使用抽象能够精简问题空间,而且问题越小越容易理解,比如说我们要对接支付,抽象的纬度应该是支付,而不是具体的微信支付还是支付宝支付。
(2)DDD的限界上下文可以完美匹配微服务的要求。
在系统复杂之后,我们需要用分治来拆解问题。一般有两种方式,技术维度和业务维度。技术维度类似 MVC模式等,业务维度则是指按业务领域来划分系统。微服务架构更强调从业务维度去做分治来应对系统复杂度, 而DDD也同样的着重业务视角。
二、DDD落地
1.落地方法论
DDD实现的核心就是建立正确的领域模型,而领域模型的设计是一个循环优化的过程。其中划分边界上下文可以从梳理领域概念、梳理业务规则、梳理业务场景、梳理业务流程四个方面入手。远光远光天鸿基于DDD的思想提供领域建模指引,助力用户更轻松的构建领域模型。
2.远光天鸿契合DDD思想
远光天鸿基于DDD思想实现的方案是一套完整而系统的设计方案,它能带给你从战略设计到战术设计的专家化、智能化的架构设计和规范指导。
(1)领域驱动设计是针对复杂系统设计的软件工程方法,它在战略层面有三个重要的点,一是聚焦业务核心价值,二是统一语言,三是业务领域划分。
(2)领域驱动设计思想与微服务设计思想契合,其中的领域、子域、核心域、通用子域、限界上下文等思想提供如何把握粒度拆分微服务。
(3)统一在云服务上管控精炼领域模型的过程,最终实现领域模型云端数据化。
(4)核心领域标准化,个性场景定制化。通过配置实现个性化定制,快速响应需求变更。
3.远光天鸿实现DDD功能
(1)领域拆分:远光天鸿天生面向微服务设计,提供领域,子域,支撑组件,通用领域,限界上下文的建模。
(2)统一语言:远光天鸿提供了一套完整而系统的统一语言和设计方法,通过协同沟通规范了一体化设计。使得项目相关角色人员(需求、设计、开发等)可以在云服务使用相同元素进行设计,并且上一环节可以顺滑的传递过渡到下一环节。
(3)精炼领域模型:远光天鸿提供了领域模型的设计,模型与代码实现的绑定,模型即实现。可以通过模型的“正确”验证软件的“正确”,从而确保软件实现符合需求,提升软件质量,体现业务价值。
(4)场景设计:核心领域模型标准化后构建成的产品,在客户化实施过程中需要定制,可以通过二次开发,或者配置场景的方式调用中心层领域模型,快速响应定制。
4.远光天鸿提炼领域模型
远光天鸿的模型库内置标准化、专业化的领域模型、行业标准模型等多种模型,以及标准元素,提供丰富的模型资源,以及多种灵活快速的模型引用方式,协助用户快速构建各种业务模型。
远光天鸿已在外网上线包含部分功能的精简版(www.ygtswan.com),如想了解更多相关资讯,也可以关注远光天鸿的官方公众号【远光天鸿】。