首页 > 资讯 > > 正文

记一次公司内部技术分享—DDD

2023-08-03 11:24:51 来源:博客园
前言

笔者于2021年入职了杭州一家做水务系统的公司,按照部门经理要求,新人需要做一次个人分享(主题随意)。 当时笔者对DDD充满了浓厚的兴趣,之前也牛刀小试过,于是就决定班门弄斧Show一下。后来在公司的新项目中,笔者也是大胆启用了DDD,带领团队和DDD来了一场亲密拥抱。尽管该项目最后被无情抛弃,笔者却未留下任何遗憾。今天拿来记录,权当是本人对DDD的一次追忆吧!

正题

领域驱动设计(Domain Drive Design)的概念,以下简称“DDD”,来源于2003年著名建模专家Eric Evans发表的他最具影响力的书籍《领域驱动设计--软件核心复杂性应对之道》。DDD是一种设计方法,围绕业务概念构建领域模型,并通过分离技术实现的复杂度,从而控制软件演化的复杂度。

什么是领域

领域(Domain)是指一种特定的范围或区域。领域是有范围的,可以根据范围的不同来定义边界。DDD的领域指的就是这个边界内要解决的业务问题域。


【资料图】

什么是子域

领域可细分为多个子领域,即子域(Sub Domain)。每个子领对应一个更小的问题域。子域可根据自身重要性和功能属性划分为三类子域:核心子域:决定产品和公司核心竞争力的子域,是业务成功的主要因素和公司的核心竞争力。通用子域:没有太多个性化需求,同时被多个子域使用的通用功能子域。比如: 认证、权限等。支撑子域:既不包含决定产品和公司核心竞争力的功能,也不包含通用功能的子域,但又是必需的子域。具有企业特性,但不具通用性。

什么是战略设计和战术设计

DDD分为战略部分和战术部分,两者相辅相成。战略部分用于理解、梳理业务,找到核心业务,更好地划分系统(这也是DDD为什么可用于指导微服务设计的原因)。战术部分用于落地到代码上,用代码来清晰地表示业务,代码如何分层、如何设计都有一套成熟的指导方案。

什么是通用语言

通用语言(Ubiquitous Language) 是通过团队交流达成共识的能够简单、清晰、准确传递业务规则的语言。通用语言往往跟领域中的名词术语和用例场景有关。名词一般可以给领域对象命名,如:客户、订单等,它们对应领域模型中的实体对象。动词则表示一个动作或领域事件,如:商品已下单、订单支付等,它们对应领域模型中的领域事件或者命令。

什么是限界上下文

限界上下文(Bounded Context)可以拆分为两个词:限界和上下文。限界是指一个边界,某一个范围。上下文:即语义环境。限界上下文就是在限定的上下文环境内,用来封装通用语言和领域对象,保证领域内的一些术语、领域对象等有一个确切的含义,没有语义二义性的一个业务边界。

什么是领域模型

领域模型(Domain Model)是关于某个特定业务领域的软件模型。通常,领域模型通过对象模型来实现,这些对象同时包含了数据和行为,并且表达了准确的业务含义。

什么是实体

在DDD的领域模型中有这样一类对象,它们拥有唯一标识符,并且它们的标识符在经历各种状态变更后仍能保持一致。对于这些对象而言,重要的不是属性,而是其延续性和标识。我们把这样的领域对象称为实体(Entity)。

什么是值对象

值对象(Value Object) 是通过对象属性值来识别的对象,它将多个相关的属性组合成一个概念整体,用于描述领域的某个特定方面,是一个没有标识符的对象。值对象是没有生命周期的,且数据不可变。

什么是聚合和聚合根

聚合(Aggregate)定义了一组具有内聚关系的相关对象的集合,我们把聚合看作是一个修改数据的单元。每个聚合都含有一个根实体,叫做聚合根(Aggregate Root)。

1. 每个聚合有一个根和一个边界,边界定义了一个聚合内部有哪些实体或值对象,根是聚合内的某个实体。2. 聚合内部的对象之间可以相互引用,但是聚合外部要访问聚合内部的对象时,必须通过聚合根才行。3. 聚合内除根以外的其他实体的唯一标识都是本地标识,也就是只要在聚合内部保持唯一即可,因为它们总是从属于这个聚合的。4. 聚合根负责与外部其他对象打交道并维护自己内部的业务。5. 基于聚合的以上概念,我们可以推论出从数据库查询时的单元也是以聚合为一个单元,也就是说我们不能直接查询聚合内部的某个非根的对象。6. 聚合内部的对象可以保持对其他聚合根的引用。7. 删除一个聚合根时,必须同时删除该聚合内的所有相关对象。因为它们都同属于一个聚合,是一个完整的概念。

什么是仓储

仓储(Repository)是一个协调领域模型和数据映射层的组件,使用类似集合的接口访问领域对象。

1. 仓储是介于领域层和基础层之间薄薄的一层,为了解耦领域逻辑和数据处理逻辑。2. 仓储模式包含仓储接口和仓储实现。仓储接口定义在领域层,而仓储实现在基础层(依赖倒置)。3. 仓储是为聚合服务的,一个聚合会对应一个仓储,统一由仓储来完成聚合数据的持久化。

什么是领域服务

当一块业务逻辑无法融入任何现有聚合,而聚合又无法通过重新设计适应操作时,就要考虑使用领域服务(Domain Service)了。为了实现业务操作,领域服务负责协调聚合和仓储的活动。同时领域服务使用的名字严格遵循统一语言。

DDD如何分层DDD将系统分为四层:基础设施层、领域层、应用程序层和表现层。

基础设施层:该层为其它各层提供技术有关的任何东西,它不会涉及任何业务知识。比如:对数据库的访问,因为数据的读写与业务无关。

领域层:包含了业务所涉及的领域对象、领域服务以及它们之间的关系。这部分内容的具体表现形式就是领域模型。DDD提倡富领域模型,即尽量将业务逻辑归属到领域对象上,实在无法归属的部分则以领域服务的形式进行定义。

应用程序层:该层不包含任何领域逻辑,但它会对任务进行编排,并可以维护应用程序的状态。因此,它更注重流程性的东西。该层是针对特定应用程序的。

表现层:负责提供用来完成任务的用户界面。它是一组屏幕,每个屏幕都包含了一组数据以及从这个屏幕发送另一组具有明确定义的数据的操作。

为什么需要DDD

即使我们的软件中没有bug,也不能表示我们设计的软件模型本身就是好的。使用DDD能够让我们的软件设计更加合理,但不止于此。对一个业务复杂的系统而言,使用DDD有如下好处:

1. 开发者和熟悉业务的人一起工作,加强团队间不同角色的合作。2. 能够帮助业务人员和开发人员梳理清楚复杂的业务规则。3. 开发出来的软件是能够准确表达业务规则的,设计就是代码,代码就是设计。

结尾

以上就是笔者那次PPT分享文字,差不多一个多小时的阐述,也只能让大家对DDD有个浅显的认识。 笔者第一次接触DDD的时候也是一头雾水、不知所云,觉得这东西太高大上。后来通过拜读园子里大佬的关于DDD的文章,再加上自己的反复推敲和琢磨,才有了一丝入门的感觉。事实上,光有理论知识还不够,你还等有一把神兵利器来为你的DDD项目保驾护航。没错,笔者正是在项目中借助了ABP这套框架,才有了足够的开发底气。 最后用一句话总结就是:纸上得来终觉浅,绝知此事要躬行。

标签:

记一次公司内部技术分享—DDD

前言笔者于2021年入职了杭州一家做水务系统的公司,按照部门经理要求,

2023-08-03 11:24:51

唐镇新虹村一辆大巴起火烧毁 幸无人员伤亡

图说:起火现场 网友供图新民晚报讯(记者徐驰)昨天上午,浦东新区唐

2023-08-03 10:05:18

西部超导08月02日被沪股通减持255.28万股

08月02日,西部超导被沪股通减持万股,已连续16日被沪股通减持,共计万

2023-08-03 09:29:10

存量房贷利率调整越来越近,何时降?怎么降?

存量房贷利率调整越来越近,何时降?怎么降?

2023-08-03 08:30:59

外围重挫 A股修复

早上好!昨天A股三大指数早盘低开,盘初市场短暂回升,深成指、创业板指

2023-08-03 07:57:52

华为wifi需登陆认证是什么

华为WiFi需要登录认证是一种网络管理员设置的登录身份验证,目的是过滤

2023-08-03 06:57:21

超2500架!沈阳最大规模无人机编队表演即将上演

8月2日,沈阳航空产业集团有限公司副总经理徐晓东在“第十届沈阳法库国

2023-08-03 06:06:17

湖南元宵晚会2023直播(湖南元宵晚会2015)

我是小前,我来为大家解答以上问题。湖南元宵晚会2023直播,湖南元宵晚

2023-08-03 03:47:16

沉醉的意思是什么(沉醉的意思)

我是小前,我来为大家解答以上问题。沉醉的意思是什么,沉醉的意思很多

2023-08-03 00:55:56

应急管理部:加强蓄滞洪区排查管控 全面排查京津冀山区地质灾害风险

8月2日,应急管理部召开会议,强调要清醒认识当前防汛救灾形势的严峻性

2023-08-02 21:46:35

游泳健身也能“薅羊毛” 2023上海体育消费券来了!

央广网上海8月2日消息(记者唐奇云)今天你运动了吗?在第15个全民健身

2023-08-02 20:56:19

中国·玉环第六届国际高层次人才创业大赛启动

潮新闻客户端记者许伊雯近日,2023“智联全球才聚玉环”中国·玉环第六

2023-08-02 20:10:10

深圳市开展中小学生定向越野比赛

中国教育报-中国教育新闻网讯(通讯员刘文玲杨曼潮记者刘盾)走出教室

2023-08-02 19:11:03

儿童青少年心理咨询:孩子性格孤僻,人际交往能力弱,怎么办?

心理学研究表明,孩子在3岁之后就有对外交往的意愿。同伴群体,是孩子

2023-08-02 18:39:35

北向资金今日净卖出50.19亿元。东方财富、招商银行、恒瑞医药分别净卖出4.28亿元、3.77亿元、3.19亿元。宁德时代净买入额居首,金额为2.01亿元。

北向资金今日净卖出50 19亿元。东方财富、招商银行、恒瑞医药分别净卖

2023-08-02 17:20:54

K1178次:“两袋面粉,让我们渡过了难关”

7月29日以来,受台风“杜苏芮”影响,京津冀地区普降大到暴雨,K1178次

2023-08-02 16:41:29

锦州这个海水浴场水质为良,较适宜游泳

2023年部分沿海城市海水浴场水质概况(第15期)2023年7月21日~7月24日

2023-08-02 16:18:47

景区须告别“坐地圈钱”

原标题:景区须告别“坐地圈钱”日前,有网友发布视频称,游客在西部G3

2023-08-02 15:45:13

记者:利物浦和南安普顿就拉维亚开启对话,红军在考虑其他选择

直播吧8月2日讯据天空体育记者MelissaReddy报道,利物浦和南安普顿已经

2023-08-02 15:17:26

关联公司成被执行人还借钱收购田中精机?肖永富入主后,加码布局新能源

关联公司成被执行人还借钱收购田中精机?肖永富入主后,加码布局新能源

2023-08-02 14:06:05

8月2日 13:43分 瑞晟智能(688215)股价快速拉升

分时图快速拉升意味此时存在大单买入,在大单的推动下,股价快速地上涨

2023-08-02 13:36:03

申请失业补助金后悔了怎么办?

本文主要讨论了在申请失业补助金后悔的情况下该如何处理。文章从停止领

2023-08-02 12:41:40

为什么不建议注销信用卡?

随着经济的发展,信用卡已经成为现代生活中必不可少的一部分。然而,许

2023-08-02 12:02:47

乌克兰外交部召见波兰驻乌克兰大使

乌克兰外交部召见波兰驻乌克兰大使

2023-08-02 11:55:45

徐耀任宁夏回族自治区副主席

自治区十三届人大常委会第四次会议决定任命徐耀为自治区副主席8月2日,

2023-08-02 11:11:25

宁夏五项行动加快“互联网﹢医疗健康”发展

港股异动|恒大汽车(00708)涨超3% 拟通过股权或债务融资方式筹集5亿美元

华丽家族:8月1日融资买入2236.77万元,融资融券余额3.83亿元

为新款Model 3让路?特斯拉香港Model3/Y大降价

数据,汽车智能化竞争的关键

猪价上涨是触底反弹还是昙花一现?上市猪企降成本待新周期来临

无线适配器或访问点有问题咋处理(无线适配器或访问点有问题)

移步换景、穿越古今游河南!河南多项智慧文旅成果上线

国际足联官宣,中国女足奖金达500万,足协无权过问

东吴证券:保险行业边际向好的内外部环境赋予估值弹性 推荐中国太保(601601.SH)、新华保险(601336.SH)等

Prada推出美妆产品 面霜售价超3000元

盛夏之夜老表上场!江西“村BA”在“红色故都”瑞金激情开赛

从新款自研芯片V3开始,来看vivo如今的影像规划

smart“变身”四年,仍未等来好日子

块石的堆积密度一般是多少(花岗岩块石的堆积密度是多少)

载誉而归!世界中学生锦标赛冠军历城二中女足将观看泰山队比赛

闪电评论|急军人之所急 山东用心用情做好双拥工作

中国电影票房再次迎来高光时刻

如何看待当前港股上行空间?东方证券:逢低买入并持有是一个较优策略

腾讯微博注册商标(腾讯微博注册)

海河流域大清河东淀蓄滞洪区启用

女足世界杯丨事关小组出线 中国女足今晚19时对阵英格兰队

埃安7月销量再次突破4.5万辆,网约车专属产品?

2023芜湖奥体中心暑期公益培训哪些人可以报名参加?

成都郫都区红光街道编外招聘

x 广告
x 广告

Copyright @  2015-2022 华中家电网版权所有  备案号: 京ICP备12018864号-26   联系邮箱:2 913 236 @qq.com