关于领域驱动设计,大家都理解错了(领域驱动设计的主要核心概念)

翻遍整个互联网,我发现,关于领域驱动设计,大家都理解错了

今天,我们尝试通过一篇文章的篇幅,给大家展示一个完全不同的视角,把“领域驱动设计”这六个字解释清楚。

领域驱动设计学习资料现状

领域驱动设计的概念提出已经有20年的时间了,整个互联网充斥着大量书籍、文章和视频教程,这里我列举几本比较著名的优秀书籍:

  • 领域驱动设计之父 Eric Evans《领域驱动设计-软件核心复杂性应对之道》

  • Vaughn Vernon的《实现领域驱动设计

  • 张逸老师的《解构领域驱动设计》

首先不可否认,这些书籍都是优秀的作品,也被业界奉为宝典级别的作品,网上大部分资料的核心内容也都是类似的,但我相信,大部分人读这些资料的感受是:

  • 晦涩难懂

  • 不明觉厉

为什么会云里雾里不明觉厉?

首先,我先列举出了大部分文章提到的概念名词:

  • 问题空间(problem space)

  • 解决方案空间(Solution Space)

  • 领域(Domain)

  • 限界上下文(Bounded Context)

  • 通用语言(Ubiquitous Language)

  • 实体(Entity)

  • 值对象(Value Object)

  • 聚合(Aggregate

  • 仓储(Repository)

  • 工厂(Factory)

  • 领域服务(Domain Service)

  • 领域事件(Domain Event)

目前主流的领域驱动设计资料(书籍、文章、课程),都在尝试将这些概念给读者讲明白,都在尝试解释这样的方法是好的方法,但很显然都没有站在一个不懂领域驱动设计的开发者角度来讲解,要理解这些资料所讲述的观点,是需要先理解“领域驱动设计”,然后才能看得懂,甚至出现领域建模需要“凭经验”这样的说法。

所以说目前大部分的资料,懂领域驱动设计的人才能看懂,而懂的人,又不需要通过这些资料获取养分,这就变成了一部分人的自娱自乐。

由于大部分人在了解领域驱动设计的过程中,更多的感受是“晦涩难懂”、“不明觉厉”,导致整个软件行业对它产生了两级分化的评价,一部分人认为领域驱动设计完全没用,不可落地,一部分人却认为这是软件工程困境的解药,而且处于这两极的开发者,不仅观点无法调和,甚至在辩论过程中,也是驴唇不对马嘴,完全无法在一个频道上沟通和交换观点。

领域驱动设计到底是什么?

// 全网第二个把 DDD 说明白的视频https://www.bilibili.com/video/BV1AZ421M7zw

先说观点:领域驱动设计是一种价值观

领域驱动设计不是方法论,不是软件设计时的思想指导,不是代码组织的灵丹妙药,它本质上是一种价值观,是你做一个决策时的价值取向。

接下来,咱们把“领域驱动设计”这六个字拆解出来分析。

首先什么是“领域”?英文原词就是“Domain”,这个词并不抽象,就是其直接的含义,就是边界、范围的意思。比如一个篮球场的范围,一个国家的领土范围,一个公司前台的工作职责范围,又或者是一个软件系统提供的功能的范围。

关于领域驱动设计,大家都理解错了(领域驱动设计的主要核心概念)

然后是“驱动”,怎么理解呢?我们看看下面几句话:

赚钱驱动工作

欲望驱动求偶

领域驱动设计

关于领域驱动设计,大家都理解错了(领域驱动设计的主要核心概念)

这三句话的句式是类似的,解读起来就是:工作的目的是赚钱,所以赚钱这个目的驱使我们工作,我们世俗的欲望驱使我们求偶,那么识别(问题、解决方案)的范围/边界这个目标驱使我们进行分析和设计行为。所以“驱动”的意思是为了xx的目标而做yy。

最后是“设计”就是指我们分析需求、设计模型、组织代码的行为。

到这里,“领域驱动设计”这个词表的的意思,就是我们做软件设计的核心驱动力,就是识别各种各样的范围和边界。如果你认同这个观点,就意味着你认为“识别领域”是软件设计的核心目标,是软件设计最重要的事情。

什么是最重要的事?就是你的价值取向,就是价值观。而价值观又恰恰是人们做各种决策的底层因素。

这里举个例子,有的人出门喜欢打车,图方便,方便就是ta看重的价值,有的人出门喜欢自行车,可以锻炼,锻炼就是ta看重的价值,看重不同的价值,在做“选择交通工具”这个决策时,起了决定性作用,最终做出的决定也是不同的。

因此,我们认为价值观决定了做决策时看重什么,而“领域驱动设计”的价值观,就是识别领域是最重要的事,我在分析业务、建模过程中,一定要识别出范围和边界,不识别出来我就不舒服。

当然也有很多与“领域驱动设计”不一致的价值观,比如为了赶工期,“这块没搞清楚,先凑合一下,以后再说”,也是一种常见的软件设计价值观的体现,这是“工期大于一切”的价值观。

当然,很多人会说把需求完全分析清楚也是不现实的,诚然这个是没错的,因此“领域驱动设计”追求的领域的“明确性”,而不是“正确性”,只要我们在做决策的时候,明确哪部分范围是确定性的,哪部分范围是模糊的,模糊的部分当下被我们明确地划分到了哪个部分范围内。毕竟老板、产品经理、研发都是在有限地信息下做决策,不可能全知全能,一定有一部分地决策是做一定地预判,只要我们明确地知道不明确的部分处于怎样地范围即可,未来随着信息的越来越充分,不断修正我们对领域划分的决策即可。

为什么这个价值观符合软件设计的价值利益

// 为什么 DDD 符合软件设计的价值利益https://www.bilibili.com/video/BV19b421H7wc

首先,先来思考一个经典问题:“把大象放进冰箱,一共需要几步?”

第一步,打开冰箱门;第二步,把大象放进去;第三步,关上冰箱门。

我们在解决任何问题的时候,都会遵循一个模式:“大问题拆成小问题”。

关于领域驱动设计,大家都理解错了(领域驱动设计的主要核心概念)

而这个模式等价于:“复杂问题变为简单问题”。

关于领域驱动设计,大家都理解错了(领域驱动设计的主要核心概念)

那么最关键的问题来了,如何衡量“复杂”和“简单”?我们来看几个例子,下面两个系统,你觉得哪个更复杂?你一定会选“系统2”,因为显然它的元素数量更多。

关于领域驱动设计,大家都理解错了(领域驱动设计的主要核心概念)

下面两个系统呢?是不是感觉“系统3”更复杂?

关于领域驱动设计,大家都理解错了(领域驱动设计的主要核心概念)

基于上面的例子,我们至少可以得出两个判断:

系统复杂度与元素的数量和元素的关系有关;

元素的关系对系统复杂度的影响远远大于元素的数量所产生的影响;

关于领域驱动设计,大家都理解错了(领域驱动设计的主要核心概念)

回归到领域驱动设计,为啥要划分领域?因为“划分领域就是在用数量简化关系”,用明确的边界将问题拆解,逐个击破。其意图是控制系统复杂度,尽可能降低系统的复杂度,而复杂度的降低,是与我们软件工程的投入产出利益一致的。

到此,我们就形成了一个核心逻辑链条:“划分领域->降低复杂度->降低成本”,因此划分领域符合我们价值取向,我们愿意认同“领域驱动设计”的价值观。

重新审视对待“领域驱动设计”的分歧

假如你认同“领域驱动设计是一种价值观”这样的观点,我们重新来回到前面说的“完全没用,不可落地”和“软件工程困境的解药”这两派观点的分歧上,就会发现大家的分歧底层就是价值观的分歧,一方面大家的讨论维度都停留在“领域驱动设计怎么落地”这个层面,缺少了“领域驱动设计到底是什么”这个问题的共识;另一方面大家没有察觉到核心分歧其实是价值观的分歧,导致了对于“领域驱动设计”的理解和判断过程缺乏底层认知的共识。

对于本质没有共识,其之上的所有讨论如同“空中楼阁”,缺乏严密逻辑链条的推导,那么表达者不得不用一些抽象的概念来模糊化自己表达的东西,从而使得“领域驱动设计”这个词变得越发抽象,越发“不明觉厉”。

后续

本文从why的角度解析了“领域驱动设计”,并未涉及到How的部分,但以我的经验来看,理解了why,在执行How的操作时会更加地笃定和自信,更容易成功。

且听我后续慢慢道来。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

(0)
上一篇 2024年7月8日 上午11:11
下一篇 2024年7月8日 上午11:23

相关推荐

  • 民主评议党员制度详解

    民主评议党员是把党员教育、管理、监督融为一体的一项从严治党的有效措施。通过民主评议、组织考评、表彰先进、处置不合格党员,提高党员素质,保持党员队伍的纯洁性和先进性,增强党组织的创造…

    科研百科 2023年6月29日
    233
  • 项目管理体系化

    项目管理体系:从概念到实践 项目管理体系是一种组织和管理项目的方法,旨在确保项目能够按时完成,并在预算内,质量上和时间表上都达到要求。在现代商业环境中,项目管理体系已经成为企业成功…

    科研百科 2024年8月16日
    37
  • 农行南阳分行:党建引领推进合规管理(银行党建引领合规征文)

    来源:南阳日报-龙腾南阳 10月11日,笔者从农行南阳分行获悉,该行认真贯彻落实银保监会工作部署,以党建引领压实合规经营责任,深入推进“内控合规管理建设年”活动,确保全行平安运营。…

    科研百科 2023年6月8日
    344
  • 房天下办公系统v2.0

    房天下办公系统v2.0:企业高效办公的新选择 房天下办公系统v2.0是房天下公司推出的一项全新的办公系统,旨在为企业提供更高效、更灵活的办公方式。该系统采用了先进的云计算技术,支持…

    科研百科 2024年8月28日
    45
  • 软件开发项目管理资料

    软件开发项目管理资料 软件开发项目管理是软件开发过程中非常重要的一个环节。它涉及到计划、执行、监控和收尾等各个方面,对于软件开发项目的成功完成至关重要。本文将介绍软件开发项目管理的…

    科研百科 2024年10月30日
    0
  • 新疆博乐市小营盘镇牧民过上“两栖”生活

      如今,新疆博乐市小营盘镇牧民最流行的生活方式就是白天在牧区放牧,晚上回到镇里楼房居住,这被当地人被称为两栖生活.hc2   近日,当记者来到博乐市小营盘镇的时候,一个个现代化的…

    科研百科 2022年5月17日
    480
  • 项目管理中如何平衡成本,时间和质量?(项目管理中如何平衡成本,时间和质量的关系)

    在项目管理中,平衡成本、时间和质量是非常重要的。这三个因素之间存在着复杂的相互关系,需要经过精心的规划和管理才能取得良好的平衡。下面将从不同角度来探讨如何平衡这三个因素。 首先,对…

    科研百科 2024年6月12日
    110
  • 吉林省农业农村打造畜牧业养殖新技术新模式

      吉林省是农业大省,畜牧业在促进农民就业、带动农民增收和实施乡村振兴战略中具有举足轻重的地位和作用。加快推进畜禽养殖废弃物资源化利用,是打好污染防治攻坚战的关键环节,是实施农村人…

    科研百科 2022年5月14日
    388
  • 商业地产合同管理

    商业地产合同管理 商业地产合同管理是商业地产开发过程中至关重要的一环,它关系到开发商、业主和租户三方的利益,因此必须妥善管理。本文将从商业地产合同管理的定义、目的、重要性以及管理方…

    科研百科 2024年8月13日
    34
  • 精工oa协同办公

    精工oa协同办公:让工作更加高效 随着现代办公方式的不断演变,协同办公已经成为了现代企业必不可少的一部分。而精工oa协同办公系统则是协同办公领域中的佼佼者,其高效的协同办公能力能够…

    科研百科 2024年9月1日
    36