DailyMart02:DDD领域分解与微服务划分

news2024/11/26 5:33:47

大家好,今天咱们继续更新DDD&微服务系列!

DailyMart是一个简单的购物商城,主要销售书籍,包括实体书和电子书。本文将使用领域驱动设计(DDD)对DailyMart的业务进行分析与优化,以提高系统的内聚性和降低耦合度。

1. DailyMart核心业务流程

DailyMart的核心业务流程如下:

  1. 用户在DailyMart上注册并获得初始积分。购物时可获得积分奖励,1000积分可抵扣10元。

  2. 用户可配置多个收货地址,将其中一个地址设为默认地址。

  3. 用户登录后可将书籍加入购物车或直接购买。购买后生成订单并支付。支付完成后,商城发货,用户可查看物流信息。

2. 领域分解与子域划分

根据DDD的设计原则,我们首先对DailyMart进行领域分解,识别出核心业务和支撑业务。

2.1 什么是领域

在研究和解决业务问题时,DDD 会按照一定的规则将业务领域进行细分,当领域细分到一定的程度后,DDD 会将问题范围限定在特定的边界内,在这个边界内建立领域模型。进而用代码实现该领域模型,解决相应的业务问题。简言之,DDD 的领域就是这个边界内要解决的业务问题域。

既然领域是用来限定业务边界和范围的,那么就会有大小之分,领域越大,业务范围就越大,反之则相反。

领域可以进一步划分为子域,每个子域对应一个更小的问题域或更小的业务范围,子域可以根据自身重要性和功能属性划分为三类子域,它们分别是:核心域、通用域和支撑域。

核心域是系统的核心业务,直接关系到业务价值;支撑域是辅助核心域的业务,对核心域有一定的支持作用;通用域是通用的业务功能,可以在多个系统中复用。

划分核心域、通用域、支撑域的原因是公司在 IT 系统建设过程中,由于预算和资源有限,对不同类型的子域应有不同的关注度和资源投入策略。对于核心域我们需要重点关注,投入足够的资源,需要绝对掌握;对于支撑域和通用域在资源不够的情况下可以采用外包或外采的方式。

2.2 DailyMart的领域分解

在对DailyMart进行领域拆分时,首先我们需要识别出系统中最具有业务价值的部分,将其划分为核心域。

很显然,对于一个商城系统来说自然是卖更多的商品,获得更多的收入。在DailyMart中商品和订单是直接关系到业务收入的部分,因此将其划分为核心域。

确定好核心域后,我们再根据DailyMart的业务流程找出其他支撑业务,包括用户管理、积分管理、收货地址管理、购物车管理和物流管理。在将支撑业务划分子域时需要考虑各个业务功能之间的关联程度,关联性较高的功能应该归属于同一个领域,以便于协同开发和维护。 在DailyMart中用户管理、积分管理和收货地址管理都与用户相关,因此将它们划分到用户子域;购物车管理和物流管理功能比较独立,可以划分成单独的子域。

综上,我们将DailyMart中商品子域、订单子域、用户子域、购物车子域和物流子域5个主要子域。

b621a7538ac102dd09c20e022501d028.png

3. 限界上下文划分

在DailyMart的领域划分中,我们已经识别出了商品子域、订单子域、用户子域、购物车子域和物流子域这几个主要的子域,接下来需要需要进一步将每个领域划分为若干限界上下文(Bounded Context)。

3.1 什么是限界上下文

限界上下文是DDD中的一个重要概念,它定义了领域知识和语言的范围。每个限界上下文都有自己的领域模型,相互之间通过定义良好的API进行协同。限界上下文的划分主要依据领域模型之间的干扰程度,领域模型之间互不干扰的部分可以划分为独立的限界上下文。

可以说,限界上下文是微服务设计和拆分的主要依据。在领域模型中,如果不考虑技术异构、团队沟通等其它外部因素,一个限界上下文理论上就可以设计为一个微服务。

不过,这里要提示一下:除了理论,微服务的拆分还是有很多限制因素的,在设计中不宜过度拆分。

3.2 DailyMart的限界上下文

在DailyMart中,每个子域内部的业务逻辑和数据模型都较为独立,但是子域之间又存在一定的关联,这就可能会导致子域的领域模型之间相互干扰。为了减少领域模型之间的干扰,我们需要对每个子域内部进一步划分限界上下文。

商品子域主要包括商品信息管理和商品库存管理两个方面,这两个方面的数据模型和业务逻辑都较为独立,可以将其划分为商品信息限界上下文和商品库存限界上下文。

订单子域涉及订单创建、支付、发货等流程,这些流程关联紧密,不单独划分限界上下文。

用户子域主要包括用户注册、登录、积分管理和收货地址管理,其中登录注册,收货地址管理跟用户密切相关,积分管理主要是记录用户购物行为带来的积分变化和积分使用情况,也可以放入用户上下文统一管理。

购物车子域和物流子域内部的业务比较独立,暂不需要进一步划分限界上下文。

最终划分的限界上下文如下:

e3427169574e687a27a6e8f504702ac7.png

综上,我们将DailyMart划分为6个主要的限界上下文,它们之间通过接口进行交互和协同工作。这有助于我们在后续的领域建模和开发中保持高内聚和低耦合。

4. 微服务拆分

如前所述,一个限界上下文可以被设计为一个微服务。因此,我们将以下几个限界上下文设计为微服务

  • 商品微服务:dailymart-product-service

  • 库存微服务:dailymart-inventory-service

  • 用户微服务:dailymart-customer-service

  • 订单微服务:dailymart-order-service

  • 购物车微服务:dailymart-car-service

  • 物流微服务:dailymart-logistics-service

每个微服务都有自己的存储,它们之间通过API进行交互。下面是使用Spring Cloud组件的微服务架构图(不考虑其他中间件)。

6bb06e6febe8b43ed2c3b1f9644bbe89.png

使用IDEA生成的项目结构如下:

74b2084b03fc725b338fe80d9d7f2b28.png

5. 小结

本文主要是DailyMart的业务分析,同时通过DDD战略设计进行领域分解、限界上下文划分,同时根据限界上下文划分出了微服务架构,提高了系统内聚性和降低了耦合度。

最后,欢迎关注公众号和加入知识星球,获取最新的文章和源码更新。现在加入知识星球,您还可以享受30元优惠券,每天仅需不到3毛钱。

- End-

公众号回复关键词 知识星球 获取限量30元优惠券加入,每天不到3毛钱。目前更新了SpringCloud alibaba开发实战、Kubernetes云原生实战、分库分表实战、设计模式实战、架构实战、一起学DDD 、SpringBoot 老鸟等,还有每周的送书活动等着你....

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

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

相关文章

今天的技术干货由 ChatGPT 买单了~~

ChatGPT 技术最近有多火就不用再介绍了吧,连超级大佬都说了 ChatGPT 这是几百年不遇的、类似发明电的工业革命一样的机遇。 这种机遇当然不能错过,使用得当那就像玄幻小说里的男主角开了挂一样,用来做快速查询、资料搜集、辅助学习相当不错&a…

ip网络广播对讲的特点

随着科技的不断发展,通讯方式也在不断地变革。传统的对讲机已经无法满足现代化沟通的需求,特别是在大型企业、学校和安保等领域对讲机的局限性已经显现出来。而一种新型通讯方式:IP网络广播对讲正在逐渐受到人们的关注和使用。本篇文章将围绕…

chatgpt赋能python:Python工程师必知:掌握Pythonspdiags用于高效稀疏矩阵计算

Python工程师必知:掌握Python spdiags用于高效稀疏矩阵计算 在机器学习和数据分析中,我们常常需要处理大量的数据集来进行模型训练和预测,但是在实际应用中,很多数据集都是稀疏的。这时候,稀疏矩阵的计算就变得非常重…

2023年网络安全自治区职业院校技能大赛暨全国职业院校技能大赛新疆选拔赛任务书

2023年自治区职业院校技能大赛暨全国职业院校技能大赛新疆选拔赛任务书 一、竞赛时间 总计:360分钟 竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 A模块 A-1 登录安全加固 180分钟 200分 A-2 本地安全策略配置 A-3 流量完整性保护 A-4 事件…

linux安装并启动nacos

前提准备 下载最新稳定版本,此处以nacos-server-2.1.0.tar.gz版本为例安装下载地址:https://github.com/alibaba/nacos/releases 二、具体步骤2.1 下载完成后解压:tar -zxvf nacos-server-2.1.0.tar.gz 2.2 将解压文件移动到/usr/local目录下…

生活中有趣好玩的产品设计

生活纷繁忙碌,设计无处不在。我们的衣食住行、吃喝玩乐都在跟设计打交道,创作奇才们用竭尽所能的心智引导和体验设计,吸引着我们的注意力。 这其中充满着做产品的思路,散发着智慧的光芒,留心观察就会发现很多有趣好玩的…

机器视觉陶瓷板外观检测设备有哪些优点?

随着制造业的不断发展,各种各样的产品被生产出来,其中陶瓷板是一种被广泛应用的材料。然而,由于制造过程中的各种因素,陶瓷板的表面可能存在各种缺陷,比如裂纹、气泡、凹凸不平等问题,这些问题会影响到产品…

惊呆!用streamlit快速搭建炫酷站点!

大家注意:因为微信最近又改了推送机制,经常有小伙伴说错过了之前被删的文章,比如前阵子冒着风险写的爬虫,再比如一些限时福利,错过了就是错过了。 所以建议大家加个星标,就能第一时间收到推送。&#x1f44…

C++ MFC 学习笔记+小型通讯录系统实现

MFC 最详细入门教程 [MFC常用函数总结](https://www.cnblogs.com/jiu0821/p/4606639.html) [C & MFC]https://www.cnblogs.com/gaohongchen01/p/4176963.html [MFC入门(一)]https://www.cnblogs.com/yangyuqing/p/10283641…

FPGA远程更新/远程调试的一种简单方法

之前介绍过一种远程(无线)更新的方式,详见《起飞!通过无线WIFI下载调试FPGA》,这种方式缺点有两个:一是速度较慢;二是我们的设备中需要增加一个无线设备,增加成本的同时增加了暴露的…

DOUBLETROUBLE: 1实战演练

文章目录 DOUBLETROUBLE: 1实战演练一、前期准备1、相关信息 二、信息收集1、nmap探测目标靶机端口2、扫描目标网址目录3、访问网站,发现secret下有个图片4、将图片下载5、查看图片所含内容6、破解密码并查看7、登陆邮箱8、创建反弹shell9、上传反弹shell10、监听11…

【Android工具】更新小米电视安装小白云盘观看阿里网盘视频资源方法

微信关注公众号 “DLGG创客DIY” 设为“星标”,重磅干货,第一时间送达。 之前分享过两篇关于安卓电视看网盘资源的方法: 【Android工具】安卓TV云存储观影工具测试正常,安卓电视看电影方案小结 【Android工具】更新安卓TV云存储观…

E往无前 | 腾讯云大数据 ElasticSearch 高级功能:Cross Cluster Replication实战

前言 Elasticsearch在platinum版本中,推出了Cross Cluster Replication特性(以下简称CCR),也即跨集群远程复制。 该特性可以解决两类问题: 1,数据迁移; 2,异地备份。 本文以实战为主…

深入解读 Flink 1.17

摘要:本文整理自阿里云技术专家,Apache Flink PMC Member & Committer、Flink CDC Maintainer 徐榜江(雪尽) 在深入解读 Flink 1.17 Meetup 的分享。内容主要分为四个部分: 1. Flink 1.17 Overview 2. Flink 1.17 Overall Story 3. Fli…

这可能是最全面的Java学习路线了

大家好,我是大彬~ 我本科学的不是计算机,大四开始自学Java,并且拿到了几个互联网中大厂的offer。在学习Java这方面还是比较有经验的,下面我来分享下我整理的Java自学路线。 在这里也提醒学弟学妹们,要尽早确定以后的…

自动化Jenkins管理?使用python-jenkins管理Jenkins

点击上方蓝字⭐️关注“DevOps云学堂”,接收最新技术实践 今天是「DevOps云学堂」与你共同进步的第 26 天 如果这篇文章对您有帮助,欢迎转发点赞分享。您的关注是我持续分享的动力! 简介 本次我们将要学习JenkinsAPI接口,我们先用…

Scrapy数据爬取,Django+PyEcharts实现可视化大屏(附源码)

大家好,我是小F~ 最近有个小伙伴问我有没有基于Django的可视化大屏,小F就顺手找了一下。 于是便在GitHub上发现了一个不错的实战项目,基于qunaer长沙景点数据。 还是作者最近几天刚更新的,保真~ 项目地址: …

Rust每日一练(Leetday0010) 子串下标、两数相除、串联子串

目录 28. 找出字符串中第一个匹配项的下标 Find-the-index-of-the-first-occurrence-in-a-string 🌟🌟 29. 两数相除 Divide Two Integers 🌟🌟 30. 串联所有单词的子串 Substring-with-concatenation-of-all-words &#x…

FL Studio 21最新中文版本发布!原生插件、UI、操作优化全面更新!

FL Studio 21现已推出,提供更快、更精确的音频编辑,升级后的DAW为用户提供了更多的内容发现和改进的界面。 Image-Line发布了FL Studio 21,称其可以实现更快、更精确的音频编辑,以及对整个DAW的更多控制。 期待已久的DAW升级为用…

网络安全的学习路线是怎么样的?

在众多高大上的学习路线指导中,尝试做一股清流,把要讲清楚的都讲清楚,该学些什么,学到哪个程度进入到下一阶段的学习这些才是最重要的。 在学习之前首先要做好学习的系统规划: 1.目前市场需求主流的岗位里&#xff0…