学习视频来源:DDD独家秘籍视频合集 https://space.bilibili.com/24690212/channel/collectiondetail?sid=1940048&ctype=0
子领域定义
核心子领域
它是一个唯一的、定义明确的领域模型,要对它进行战略投资,并在一个明确的限界上下文中投入大量资源去精心打磨通用语言。它是组织中最重要的项目,因为这将是你与其他竞争者的区别所在。正是因为你的组织无法在所有领域都出类拔萃,所以必须把核心域打造成组织的核心竞争力。做出这样的决定需要对核心域进行深入的学习与理解,而这需要承诺、协作与试验。这是组织最需要在软件中倾斜其投资的方向。
支撑子领域
这类建模场景提倡的是“定制开发”,因为找不到现成的解决方案。对它的投入无论如何也达不到与核心域相同的程度。也许会考虑使用外包的方式实现此类限界上下文,以避免因错误地认为其具有战略意义而进行巨额的投资。这类软件模型仍旧非常重要,核心域的成功离不开它。
通用子领域
通用子域的解决方案可以采购现成的,也可以采用外包的方式,抑或是由内部团队实现,但我们不用为其分配与核心域同样优质的研发资源,甚至都不如支撑子域。请注意不要把通用子域误认为是核心域。我们并不希望对其投资过甚。
定义核心子领域、支撑子领域、通用子领域的时候,主要是按照主次、重要性、需要被投资多少来定义的。
核心子领域:需要投入很多资源,需要重点去开发打磨的子领域。这些子领域所实现的业务功能是一家公司最核心的盈利来源。比如电商中的订单、商品。
支撑子领域:如果缺少它,核心子领域无法运作,但又不是最核心、最直接给公司带来利润的子领域,市场上没有现成的方案来采购,需要定制开发。比如电商中的用户、营销。
通用子领域:和业务直接没有非常强的关系,可直接把行业现成的方案拿过来直接用的或采购过来直接用的子领域。比如电商中的日志分析、BI。
划分子领域的目的
划分子领域的目的就是为了指导投资。 战略投资、定制化开发等都是投资。
对子领域的误解
- 子领域不是按照软件功能维度,对系统的拆解
- 核心子领域,核心域,不是六边形架构最中间的“领域核心模块
子领域概念不实用的原因
- 对于具体的研发团队来说,要解决的问题域都是“核心子领域”。
不管是不是核心子领域,只要是公司交给任务,都要做好,不能说不给公司直接带来利润的业务就不认真对待了。 - 商业项目初期难以确定哪些是核心,哪些不是核心
对于一些传统的业务,如股票、保险,已经有上百年的历史了,业务规则比较成熟。我们在做系统设计的时候,可以根据以往的经验推测出哪些是核心子领域。但目前很多时候面临的是全新的业务,是之前没有人做过的当开始做的时候,不知道哪块是核心。比如在电商中,我们之前可能想的是商品、订单是核心子领域。但实际情况,商品、订单模块可以直接购买,不需要投入太多资源开发。渠道模块可能才是核心子领域。 - 影响研发投入的因素还有很多,子领域起不到什么作用
比如团队现有的结构,背景因素、能力差别等。
当用DDD做设计的时候,只需要通过事件风暴分析出聚合、分析出限界上下文就够了。不用管这个功能到底是不是核心子领域或者其他领域。