供应链商品域DDD实践

简介: DDD是一套方法论,实践能否成功,不仅仅是个技术问题,更是执行贯彻实施的问题。本文将就DDD的基本概念和DDD的实施进行分享。

image.png

作者 | 侧帽
来源 | 阿里技术公众号

前言

供应链商品域DDD实践时间不长,在实践过程也碰到了不少问题,有些找到了答案,有些还是在探索中。最近很荣幸受邀在供应链服务与创新团队做了一次分享,也想在这里把一些经验和想法分享给大家,借此抛砖引玉。

DDD是一套方法论,实践能否成功,我觉得不仅仅是个技术问题,更是执行贯彻实施的问题。

本文内容主要有两部分,DDD基本概念和DDD实施。基本概念包括通用语言、分层架构、DDD要素、边界上下文,DDD实施包括领域知识提取方法、思考方式的转变,在其中会穿插一些商品案例。

一 软件复杂性是什么?

在开始DDD前,我们应该先回答的一个问题,我们为什么需要DDD?DDD是复杂软件应对之道,所以我们来一起看看,软件的复杂度到底在哪里?

在阿里两年,我感受很深的一个点是,我们不能持续交付不断演进的复杂软件,所以有1.0、2.0、3.0很多的版本,1.0搞不下去了,开始2.0,2.0也搞不下去了,开始3.0,不断循环。

阿里体系复杂度我看来是理解力、不可预测、协作力挑战三个方面。

1 理解力挑战

  • 需求规模庞大,业务数量和类型不断增多,业务相互耦合,不同业务相互影响。供应链有20多个行业,经销、代销、一盘货等各种商业模式,有跨境进口、国内业务、国际化业务,这些纵横导致系统复杂度大幅提升。
  • 业务系统多,边界划分不清,系统间依赖复杂。如供应链商品和共享SELL、AIC和IPM,一直都有边界问题,一个大项目过来,边界问题就得讨论上好几天。
  • 系统结构复杂,因为应对高并发、高稳定性等,功能性代码与非功能性代码混合,如业务代码混杂着各种兜底逻辑、灰度逻辑、重试等等,100行代码,可能业务代码不到30行。

2 不可预测性挑战

  • 商业环境复杂多变,商业流程、规则多变。商业环境变化快,今年国际化、智能商业路由、考拉融合一下子都来了,在设计上很难前期都规划好。
  • 变化不可预测,软件系统变化也不可预测,带来设计挑战。

3 协作力挑战

  • 大部分需求横跨多个团队,需求传递低效,需要反复沟通,方案产出效率低。
  • 团队角色多,业务概念多,没有统一语言,大家理解容易出现偏差。

二 Why DDD?

DDD设计合适的领域模型来映射现实中的业务,来有效地解决领域中的核心的复杂问题,是对OOAD的扩展和延伸,其解决之道:

  • 分而治之,控制规模。
  • 关注点分离,应对理解力挑战,领域模型与存储模型分离,业务复杂度与技术复杂度分离。
  • 分层架构、分离核心,保持结构清晰,应对不可预测性挑战。
  • 统一语言,应对协作力挑战。

三 DDD核心

image.png

1 通用语言

通用语言是提炼领域知识的产出物,获得统一语言就是需求分析的过程,也是团队中各个角色就系统目标、范围与具体功能达成一致的过程。

领域语言团队专有,负责解释和维护,相同名称概念,跨出这个团队,理解可以完全不一样。

领域专家、产品经理、开发人员共同的语言,这种语言是将领域专家和技术人员联系在一起的纽带。

在各种文档和平时沟通中,保持概念统一,特别提一下,做一个中文对照, 把概念和代码连接起来,在代码做到概念名称统一,减少混淆。

通用语言价值:

  • 定义公共术语,减少概念混淆。
  • 沟通达成一致的提前,消除歧义和理解偏差,提升需求和知识消化的效率。
  • 概念和代码的统一语言,连接概念和实现。

image.png

2 分层架构

DDD第二个核心是分层架构,分离模型。优秀的架构应该是什么样子?关注点是分离的,可以分而治之,可测试性好。

一个人同时要做多件事情的时候,难免手忙脚乱。代码也一样,一段代码要处理各种事情的时候,也会乱成一团,所以我们要分解开来,各个击破。

image.png

商品域领域模型,在分层架构中的位置,如下:

image.png

  • CQRS模式:领域模型在应用层下面,command才走领域模型;查询和搜索服务不走。
  • tunnel层,对接db、外部数据资源访问,领域和模型解耦,类似DAO。
  • 外部通过SPI和模型交互,六边形的adapter模式。

3 DDD要素

1)实体:有id,有生命周期和状态。有属性,有行为。外部事件会触发他的行为和状态变化。

实体和vo的区分,vo属性不能修改,使用final修饰。vo为表达模型减负,如商品有100多个属性,铺平开不能体现结构化,不能体现分层分类,将相似描述性属性分组封装成一个个vo。

2)为什么需要service,如批量操作多个实体、跨实体操作,如商品复制,转账。

商品域的工程架构:

  • serivce职责是:实体创建,持久化,跨实体操作等。
  • 不同层使用不同数据对象,tunnel使用dataobjects,面向存储,需要和实体相互转换。
  • 实体间有关系,可以动态加载关联对象;dataobjects只有数据,没有行为,一般也不会有关系。

image.png

4 边界上下文

  • 边界 = 域或子域。
  • 领域对象在领域内才有确切的含义。出了这个边界,不能确保还是这个含义,如苹果。
  • 语言是有上下文的。
  • 在不同的上下文中,职责和任务不一样。人有多个角色,在家里是爸爸、在公司是小二,职责和任务不一样。

image.png

上下文映射:

  • 有了边界,那么领域如何输出价值呢?一个完全封闭的系统没有任何价值。
  • 常用的方式有:共享内核,防腐层等。防腐层:商品上游提供spi,spi不是直接对外开放领域模型,建立一层开放视图。采购域建立防腐层,收口商品的变更对本域影响。

image.png

四 DDD实施

1 DDD实施的挑战

  • 识别和提炼领域知识,并体现在模型代码上,强调一次“并体现在模型代码上”!
  • 防腐,保持模型不断演进,需要持续投入,保证DDD贯彻执行。
  • 人的转变,开发思考方式的转变。

image.png

2 什么是领域知识?

领域知识有分层分类,平台通用商业规则,是领域模型主要输入,商家个性化不能下沉到领域模型层。

image.png

3 领域知识提炼,需求和链路5W1H分析法

两阶段分析:用户故事、链路和边界分析。

  • 前3W描写用户故事,用户要什么,为什么要?举个例子,我作为采购小二,需要商品库存为0自动下架,因为有超卖风险,客户会投诉。
  • 后面的When、Where、How是链路和边界分析,触发的条件是什么,要实现这个功能需要哪些域参与进来,分别提供什么能力?

通过这个分析,获取用户需求,和全链路分工。

image.png

4 领域知识提炼,结构化分析

  • APP层至上而下过程分析,模型层自下而上分析相结合。
  • 能力下沉保持模型不断演进,能力下沉标准:复用、内聚。

image.png

5 思考方式的转变

领域驱动,在模型阶段不会关注数据设计、不会关注存储、不会关注消息怎么发,业务和技术视角关注点做了分离。

image.png

五 商品域实践相关

商品域工程架构:

image.png

image.png

最后,保持模型不断演进!!!

商品域模型更新readme,保持模型不断演进。否则会APP层会越来越大,模型层越来越小,最后头重脚轻,领域坍塌了。

image.png

原文链接
本文为阿里云原创内容,未经允许不得转载。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/513158.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20岁,Universal GIS拥抱新生的GIS信创

近20年来,在快速发展的IT新技术和国家应用需求的双轮驱动下,我国GIS技术和产业得到了飞速发展,GIS软件应用范围从几个行业深入到了数字中国建设中的数字经济、数字政务、数字社会、数字生态建设的几乎所有行业和领域。GIS软件已成为国家治理体…

如何用Netty写一个高性能的分布式服务框架?

byte[] -->堆外内存 / 堆外内存--> byte[] -->java对象。 优化:省去 byte[] 环节,直接 读/写 堆外内存,这需要扩展对应的序列化框架。 String 编码/解码优化。 Varint 优化:多次 writeByte 合并为 writeShort/writeInt/w…

C语言rec文件如何打开,REC 文件扩展名: 它是什么以及如何打开它?

REC 疑难解答典型的 REC 开放挑战Squared 5 MPEG Streamclip 不在你尝试加载 REC 文件并收到错误,例如 “%%os%% 无法打开 REC 文件扩展名”。 通常,这是因为你没有安装适用于 %%os%% 的 Squared 5 MPEG Streamclip。 操作系统不知道如何处理你的 REC 文…

Quick BI:降低使用门槛,大东鞋业8000家门店的数据导航

简介: 通过引入MaxCompute和Quick BI,大东解决了以往数据查询即刻导致数据库闪崩的状况,还搭建起完善的报表体系,稳定应对高频、高并发的数据分析。 大东鞋业一季大约有500款的新品。大区下辖的各个分公司要对这500款新品进行订货…

绿盟科技发布安全知识图谱技术白皮书

随着全球数字化和万物互联的加速发展,近年来勒索病毒的攻击手段不断升级,例如今年美国最大燃油管道受攻击导致美国17个州和华盛顿特区进入紧急状态,引起全球关注。当下企业如何提高安全运营知识以面对不断升级的威胁攻击? 近日&a…

「应用管理与交付」为什么会成为云原生新的价值聚焦点?

简介: 为什么“云原生应用管理与交付”会成为 Kubernetes 之上重要的价值聚焦点?CNCF App Delivery SIG 在推动 Kubernetes 之上应用层技术快速演进的过程中将扮演什么角色?这个领域又将发生哪些值得大家期待的创新?让我们一起了解…

android 4.4官方下载,安卓系统电脑版-android x86 4.4 iso下载官方最新版【pc版】-西西软件下载...

Android-X86是由Beyounn和Cwhuang主持设计的。提供了一套完整的可行源代码树,配套文档以及Live CD与Live USB。Android系统主要应用在智能手机以及平板电脑设备上。日前,越来越多使用英特尔和AMD处理器的计算机也开始运行Android系统。如何才 能让Androi…

dataframe iloc_如何使用iloc和loc 对Pandas Dataframe进行索引和切片

在这篇文章中,我们将使用iloc和loc来处理数据。更具体地说,我们将通过iloc和loc例子来学习切片和索引。一旦我们将一个数据集加载为Pandas dataframe,我们通常希望根据某些条件开始访问该数据的特定部分。例如,如果我们的数据集包…

Flink 和 Iceberg 如何解决数据入湖面临的挑战

简介: 4.17 上海站 Meetup 胡争老师分享内容:数据入湖的挑战有哪些,以及如何用 Flink Iceberg 解决此类问题。 一、数据入湖的核心挑战 数据实时入湖可以分成三个部分,分别是数据源、数据管道和数据湖(数仓&#xf…

高并发下的 HashMap 为什么会死循环

作者 | tech-bus.七十一来源 | 程序员巴士前言HashMap并发情况下产生的死循环问题在JDK 1.7及之前版本是存在的,JDK 1.8 通过增加loHead头节点和loTail尾节点进行了修复,虽然进行了修复,但是如果涉及到并发情况下需要使用hash表,建…

唯品会:在 Flink 容器化与平台化上的建设实践

简介: 唯品会 Flink 的容器化实践应用,Flink SQL 平台化建设,以及在实时数仓和实验平台上的应用案例。 转自dbaplus社群公众号 作者:王康,唯品会数据平台高级开发工程师 自 2017 年起,为保障内部业务在平…

python怎么变成exe_Python怎样打包成exe?

分类:Python | 作者:凹凸曼 | 发表于2011/03/01Python怎样打包成exe?已关闭评论 发现PyInstaller 是个不错的东东,解决打包单个exe的问题,使用非常简单,不用编写setup脚本&#xff1…

PolarDB-X 2.0:使用一个透明的分布式数据库是一种什么体验

简介: 透明分布式,是PolarDB-X即将发布的能力,它能让应用在使用PolarDB-X的过程中,犹如使用单机数据库一般的体验。与传统的中间件类型的“分布式数据库”相比,有了透明分布式能力的PolarDB-X,不再需要应用…

Chrome 96 又更新了 5 个巨巨巨好用的功能

作者 | 零一来源 | 前端印象‍‍‍‍‍‍‍大家好,收到了 Chrome 96 版本的更新推送,简单看了一下,还是更新了几个挺有趣的东西的,一起来看看到底都有啥~先下载 Chrome Beta 版本才能体验 Chrome 96 哈Chrome Beta我们顺便来给每个…

编译优化 | LLVM代码生成技术详解及在数据库中的应用

简介: 作者:长别 1. 前言 随着IT基础设施的发展,现代的数据处理系统需要处理更多的数据、支持更为复杂的算法。数据量的增长和算法的复杂化,为数据分析系统带来了严峻的性能挑战。近年来,我们可以在数据库、大数据系…

低代码发展专访系列之二:两三年内会出现“现象级”低代码产品吗?

前言:2019年开始,低代码爆火。有人认为它是第四代编程语言,有人认为它是开发模式的颠覆,也有人认为是企业管理模式的变革……有很多声音,社区讨论很热烈。CSDN 随后展开低代码平台产品系列活动,包括低代码开…

为什么Spring仍然会是云原生时代最佳平台之一?

简介: 基于Java语言的Spring生态,还能否适应新的开发方式,比如Cloud Native、Serverless、Faas等,它还会是云原生时代的最佳平台的选择吗?本文将从5个角度来为你分析一下这个问题,分别是:Java和…

贾又福大象鸿蒙,奏乐!继续吹!库里又创记录,射进MVP榜单,众多名记变“库吹“...

库里本月已投进85记三分 打破哈登保持的NBA单月三分命中数纪录加上今天的7记三分,库里本月已经投进85记三分,创造了新的NBA单月(自然月)三分命中数纪录。勇士本月还有两场比赛。此前,哈登曾单月82记三分。在NBA历史单月三分球命中数前三榜单中…

opencv4 图像特征匹配_概述 | 全景图像拼接技术全解析

点击上方蓝字关注我们微信公众号:OpenCV学堂关注获取更多计算机视觉与深度学习知识前言图像/视频拼接的主要目的是为了解决相机视野(FOV-Field Of View)限制,生成更宽的FOV图像/视频场景。视频拼接在体育直播、全景显示、数字娱乐、视频处理中都被广泛应…

数字化让618有了洞悉消费者内心的“大脑”

简介: 阿里云数据中台已形成包括会员智能运营、全域天攻智投、GMV策略模拟等在内的近10套解决方案,围绕“人”“货”“场”三大零售行业要素,逐个击破品牌业务难点,记者了解到,过去一年,悦诗风吟、Benefit、…