当前位置: 萬仟网 > IT编程>软件设计>领域驱动 > DDD领域驱动实战 - 子域、核心域、通用域和支撑域等核心概念

DDD领域驱动实战 - 子域、核心域、通用域和支撑域等核心概念

2020年09月28日  | 萬仟网IT编程  | 我要评论
一些名词在你的微服务设计和开发过程中不一定都用得上,但它可以帮你理解DDD的核心设计思想和理念。而这些思想和理念,在IT战略设计、业务建模和微服务设计中都是可以借鉴的。让我们来理清它们与微服务的关系,了解它们在微服务设计中的作用。领域和子域领域用于确定边界,这也是为何DDD在设计中不断强调边界。DDD会按规则细分业务领域,细分到一定程度后,DDD会将问题范围限定在特定边界内,在该边界内建立领域模型,进而用代码实现该领域模型,解决相应业务问题。领域就是该边界内要解决的业务问题域。领域也有大小之分,其

领域

用于确定边界。
DDD会按规则细分业务领域,细分到一定程度,DDD会将问题范围限定在特定边界,在该边界内建立领域模型,进而用代码实现该领域模型,解决相应业务问题。

领域就是该边界内要解决的业务问题域。其越大,则业务范围越广。

子域

领域可进步划分为子领域。划分出来的多个子领域称为子域,每个子域对应一个更小的问题域或业务范围。

DDD是一种处理高度复杂领域的设计思想,它试图分离技术实现的复杂度。
DDD的研究方法与自然科学类似。当人们在自然科学遇到复杂问题时,通常将问题步步细分,再针对细分出来的问题域,逐个深入研究,探索和建立所有子域的知识体系。当所有问题子域完成研究时,我们就建立了全部领域的完整知识体系了。

每个细分的领域都有一个知识体系,即DDD的领域模型。在所有子域研究完后,就建立了全域的知识体系(领域模型)。

以笔者所在的酒店行业为例。一开始的酒店核心系统是把所有功能放在一个系统,即单体架构。后来业务发展,开始转型中台,引入微服务架构。微服务架构就需划分业务领域边界,建立领域模型,并实现微服务落地。
为实现酒店领域建模和微服务建设,可根据业务关联度及流程边界将酒店领域细分为:网上预定,入住,退房,客房服务,点餐等领域事件。

  • 网上预订,入住,退房。是酒店领域一定要有的功能,这就是核心子域。
  • 客房服务,点餐等不影响主要功能的就是支撑子领域。
  • 在预订这个限界上下文内可以建立预订的领域模型的领域模型最后映射到系统就是预订微服务。

这就是一个酒店领域的细分和微服务的建设过程。

不同行业的业务模型可能会不一样,但领域建模和微服务建设的过程和方法基本类似,其核心思想是将问题域逐步分解,降低业务理解和系统实现的复杂度。

领域可细分为不同子域,子域可根据自身重要性和功能属性划分为三类子域:

核心域

决定产品和公司核心竞争力的子域是核心域,它是业务成功的主要因素和公司的核心竞争力。

通用域

没有太多个性化诉求,同时被多个子域使用的通用功能子域是通用域。比如认证、权限等,这类应用很容易买到,没有企业特点限制,无需太多定制化。

支撑域

既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域,但又是必需的支撑域。支撑域具有企业特性,但不具通用性,例如数据代码类的数据字典等系统。

划分核心域/通用域/支撑域的意义

不同场景下,不同的人对桃树核心域的理解不同。

核心域、支撑域和通用域的主要目标是:通过领域划分,区分不同子域在公司内的不同功能属性和重要性,从而公司可对不同子域采取不同的资源投入和建设策略,其关注度也会不一样。
由于预算和资源有限,对不同类型子域应有不同关注度和资源投入策略。商业模式和战略方向决定公司在划分核心域、通用域和支撑域时的结果。

都是电商平台的淘宝、天猫、京东和苏宁易购,商业模式却不同:

  • 淘宝是C2C
  • 京东和苏宁易购则是B2C
    • 苏宁易购是传统线下卖场转型成为电商
    • 京东是直营加部分平台模式

导致其核心域划分结果自然也不同。在公司领域细分、建立领域模型和系统建设时,就要结合公司战略重点和商业模式,找到核心域,且重点关注核心域。

总结

领域的核心思想是将问题域逐级细分,降低业务理解和系统实现的复杂度。
通过领域细分,逐步缩小微服务需要解决的问题域,构建合适的领域模型,而领域模型映射成系统就是微服务。

本文地址:https://blog.csdn.net/qq_33589510/article/details/108820172

如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

相关文章:

  • 模型驱动设计的构造块

    模型驱动设计的构造块

    [toc] 模型驱动设计的构造块 非原创,感谢《领域驱动设计》这本书 为了保证软件实现得简洁并且与模型保持一致,不管实际情况如何复杂,必须运用建模和设计... [阅读全文]
  • 四 领域驱动设计-分离领域

    四 领域驱动设计-分离领域

    [toc] 模型驱动设计的构造块 分离领域 在软件中,虽然专门用于解决领域问题的那部分通常只占整个软件系统的很小一部分,但其却出乎意料的重要。我们需要着... [阅读全文]
  • 五 领域驱动设计-软件中所表示的模型

    [toc] 软件中所表示的模型 表示模型的3种模型元素模式:ENTITY、VALUE OBJECT和SERVICE。从表面上看,定义那些用来捕获领域概念... [阅读全文]
  • 运用领域模型-绑定模型和实现

    运用领域模型-绑定模型和实现

    [toc] 领域驱动设计 运用领域模型 绑定模型和实现 聪明的项目组成员花费了几个月的时间进行仔细的研究并且开发出了详尽的领域模型(类图)。然而对类图研... [阅读全文]
  • 运用领域模型-消化知识

    运用领域模型-消化知识

    [toc] 运用领域模型 消化知识 非原创,感谢《领域驱动设计》这本书 有效建模的要素 (1) 模型和实现的绑定。最初的原型虽然简陋,但它在模型与实现之... [阅读全文]
  • 运用领域模型-交流与语言的使用

    运用领域模型-交流与语言的使用

    [toc] 运用领域模型 交流与语言的使用 非原创,感谢《领域驱动设计》这本书 领域模型可成为软件项目通用语言的核心。该模型是一组得自于项目人员头脑中的... [阅读全文]
  • 为啥看领域驱动设计

    [toc] 领域驱动设计 非原创,感谢《领域驱动设计》这本书 有很多因素会使软件开发复杂化,但最根本的原因是问题领域本身错综复杂。如果你要为一家人员复杂... [阅读全文]
  • 运用领域模型

    [toc] 运用领域模型说明 非原创,感谢《领域驱动设计》这本书 模型是什么 模型被用来描绘人们所关注的现实或想法的某个方面。模型是一种简化。是对现实的... [阅读全文]
  • 我的领域驱动设计运用实例 - 领域啊领域

    我的领域驱动设计运用实例 - 领域啊领域

    一、前言 断断续续的也有在闲余时间接触领域驱动设计的相关知识,因为目前在工作中更多的还只是一名 crud boy,因此目前也只是对其中的某些知识点有... [阅读全文]
  • Asp.Net Core Identity 骚断腿的究极魔改实体类

    Asp.Net Core Identity 骚断腿的究极魔改实体类

    前言 默认的 Identity 实体类型在大多数时候已经基本够用,很多时候也只是稍微在 IdentityUser 类中增加一些自定义数据字段,比如头... [阅读全文]
验证码:
Copyright © 2017-2020  萬仟网 保留所有权利. 粤ICP备17035492号