用以确定边界。 DDD按规则细分业务领域,细分到一定程度,DDD会将问题范围限定在特定边界,在该边界内建立领域模型,进而用代码实现该领域模型,解决相应业务问题。
领域就是该边界内要解决的业务问题域。其越大,则业务范围越广。
对业务领域做了建模
领域可进步划分为子领域。划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或业务范围。
DDD是一种处理高度复杂领域的设计思想,它试图分离技术实现的复杂度。 DDD的研究方法与自然科学类似。当人们在自然科学遇到复杂问题时,通常将问题步步细分,再针对细分出来的问题域,逐个深入研究,探索和建立所有子域的知识体系。当所有问题子域完成研究时,我们就建立了全部领域的完整知识体系了。
每个细分的领域都有一个知识体系,即DDD的领域模型。在所有子域研究完后,就建立了全域的知识体系(领域模型)。
以笔者所在的酒店行业为例。一开始的酒店核心系统是把所有功能放在一个系统,即单体架构。后来业务发展,开始转型中台,引入微服务架构。微服务架构就需划分业务领域边界,建立领域模型,并实现微服务落地。 为实现酒店领域建模和微服务建设,可根据业务关联度及流程边界将酒店领域细分为:网上预定,入住,退房,客房服务,点餐等领域事件。
这就是一个酒店领域的细分和微服务的建设过程。
不同行业的业务模型可能会不一样,但领域建模和微服务建设的过程和方法基本类似,其核心思想是将问题域逐步分解,降低业务理解和系统实现的复杂度。
领域可细分为不同子域,子域可根据自身重要性和功能属性划分为三类子域:
决定产品和公司核心竞争力的子域是核心域,它是业务成功的主要因素和公司的核心竞争力。
没有太多个性化诉求,同时被多个子域使用的通用功能子域是通用域。比如认证、权限等,这类应用很容易买到,没有企业特点限制,无需太多定制化。
既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域,但又是必需的支撑域。支撑域具有企业特性,但不具通用性,例如数据代码类的数据字典等系统。
不同场景下,不同的人对桃树核心域的理解不同。
核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。 由于预算和资源有限,对不同类型子域应有不同关注度和资源投入策略。商业模式和战略方向决定公司在划分核心域、通用域和支撑域时的结果。
都是电商平台的淘宝、天猫、京东和苏宁易购,商业模式却不同:
导致其核心域划分结果自然也不同。在公司领域细分、建立领域模型和系统建设时,就要结合公司战略重点和商业模式,找到核心域,且重点关注核心域。
领域的核心思想是将问题域逐级细分,降低业务理解和系统实现的复杂度。 通过领域细分,逐步缩小微服务需要解决的问题域,构建合适的领域模型,而领域模型映射成系统就是微服务。