架构师篇 DDD领域驱动设计篇

一 DDD领域驱动设计

1.1 领域驱动设计

领域驱动设计(英文:Domain-Driven Design,缩写DDD)是一种模型驱动设计的方法领域驱动设计常以战略设计与战术设计来将整个领域展现的淋漓尽致,其作用范围既面向业务也面向技术。从战略角度(个人更喜欢称其为上帝视角)去规划系统、划分领域。而从战术角度则从技术层面来指导我们该如何去设计。

功能作用:

1.通过模型直接反映软件的结构;2.以模型基础形成团队的统一语言;3.把模型作为精粹的知识用于传递。

领域驱动设计的核心在于领域建模,架构师的水平高低在很大程度上也体现在领域建模水平上。

1.2 mvc架构

对于业务逻辑不复杂的软件开发,MVC是简单高效的方法。但是随着业务逻辑愈来愈复杂,MVC会开始力不从心。主要体现在这几个方面:

1.MVC模式仅仅反应了软件层面的架构,它不包含业务语言,无法使用该设计直接和业务对话。

2.MVC模式天然切割了数据和行为,然后用数据库实现数据,用服务实现行为,容易造成需求的首尾分离。

3.缺乏明确的边界划分,至少在顶层设计层面没有边界划分的规范要求,更多地是靠技术负责人根据经验进行划分,大规模团队协作容易出现职责不清晰、分工不明确。

1.3 DDD的作用*

1.统一语言:

团队(业务方、产品、设计、技术等)在一个限定的上下文中有意识地形成对事物统一的描述,从而形成统一的概念(模型)统一语言用于需求文档、PRD文档、系统分析文档、代码以及日常沟通中,统一的概念和术语可以极大地提升沟通效率和工作效率。

2.面向业务建模:

领域模型和数据模型分离,业务复杂度和技术复杂度分离。DDD聚焦于领域模型,将技术实现细节从模型中剥离出来,能够更好地降低业务和技术的耦合度。

3.边界清晰的设计方法:

通过对需求的识别及分类,划分出领域、子域和限界上下文,进而指导团队成员分工协作,从而做到将复杂的问题分而治之地解决。

4.业务领域的知识沉淀:

通过模型与软件实现关联,统一语言与模型关联,反复论证和提炼模型,使得模型与业务的真实世界保持一致,从而促使业务知识通过模型得以传递和沉淀,https://zhuanlan.zhihu.com/p/641295531

1.4 领域通用语言

需要确保团队使用的语言在所有的交流形式中看上去都是一致的,这种语言被称为“通用语言(Ubiquitous Language)”。通用语言应该在建模过程中广泛尝试以推动软件专家和领域专家之间的沟通,从而发现要在模型中使用的主要的领域概念。

1.5 DDD笔记总结

1.5.1 DDD的作用

1.ddd是领域设计:ddd是通过领域驱动设计方法定义领域模型,从而确定业务和应用边界,保证业务模型与代码模型的一致性。

Ddd不是架构,而是一种架构设计方法论,它通过边界划分将复杂业务领域简单化,帮我们设计出清晰的领域和应用边界,可以很容易地实现架构演进。

概述:不是一种架构,而是一种架构方法论,是一种拆解业务,划分业务、确定业务边界的方法,是一种领域设计思想。核心思想是领域模型,避免业务逻辑的复杂度与技术实现的复杂度混淆在一起。如在不同场景中,我们对同一个事物的称呼也有较大差异。例如,商品、货物;同样一个东西,在交易领域叫做商品,在物流领域叫做货物。

2.ddd的范围:

战略设计主要从业务视角出发,建立业务领域模型,划分领域边界,建立通用语言的限界上下文,限界上下文可以作为微服务设计的参考边界。

战术设计从技术视角出发,侧重于领域模型的技术实现,完成软件开发和落地,包括:聚合根,实体,值对象,领域服务,应用服务和资源库等代码逻辑的设计和实现。

3.闲谈吹牛格局

DDD思想精髓值得软件工程师以及架构师们领会,即:

1.直接面向业务进行领域建模,将业务知识沉淀到领域模型中。业务知识的沉淀不是一蹴而就,应该反复提炼,持续演进;为了让演进提炼的过程高效顺畅,团队使用统一语言来沟通、描述需求和设计方案。

2.高内聚、低耦合是应对软件复杂度的不二法则领域、子域、限界上下文、聚合都是为这条宗旨服务的工具。

3.深刻理解业务,洞察问题本质才是一个架构师最核心的能力体现。寻找领域模型,提取统一语言,做分层与隔离。

1.5.2 贫血模型和充血模型*

1.贫血模型:只包含数据,不包含业务逻辑的类。

2.充血模型:既包含数据,也包含业务逻辑的类。

1.5.3 mvc与ddd的区别* 

 1.5.4 应用层和服务关系*

1.5.5 ddd的工程架构层级说明 

1.层级概述

2.层级功能说明

1.5.6 ddd的领域划分

1.领域的拆分

2.领域

3.领域

1.6 DDD的工程架构

1.6.1 工程概览

分为:接口层,应用层,领域层,基础设施层。

1.6.2 接口层

1.6.3 应用层

1.6.4 领域层

1.6.5 基础层

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

『GitHub项目圈选02』一款可实现视频自动翻译配音为其他语言的开源项目

🔥🔥🔥本周GitHub项目圈选****: 主要包含视频翻译、正则填字游戏、敏感词检测、聊天机器人框架、AI 换脸、分布式数据集成平台等热点项目。 1、pyvideotrans pyvideotrans 是一个视频翻译工具,可将一种语言的视频翻译为另一种语…

完整版解答!2023年数维杯国际大学生数学建模挑战赛B题

B题完整版全部5问,问题解答、代码,完整论文、模型的建立和求解、各种图表代码已更新! 大家好,目前已完成2023数维杯国际赛B题全部5问的代码和完整论文已更新,部分展示如下: 部分解答图表 问题分析 B题前三…

打不开github网页解决方法

问题: 1、composer更新包总是失败 2、github打不开,访问不了 解决方法:下载一个Watt Toolkit工具,勾选上,一键加速就可以打开了。 下载步骤: 1、打开网址: Watt Toolkit 2、点击【下载wind…

ROS 学习应用篇(八)ROS中的坐标变换管理之tf广播与监听的编程实现

偶吼吼胜利在望,冲冲冲 老规矩新建功能包 工作空间目录下/src下开启终端输入 catkin_create_pkg learning_tf roscpp rospy tf turtlesim 如何实现tf广播 引入库 c python …

基于猕猴感觉运动皮层Spike信号的运动解码分析不同运动参数对解码的影响

公开数据集中文版详细描述参考前文:https://editor.csdn.net/md/?not_checkout1&spm1011.2124.3001.6192神经元Spike信号分析参考前文:https://blog.csdn.net/qq_43811536/article/details/134359566?spm1001.2014.3001.5501神经元运动调制分析参考…

开源简历生成器OpenResume

什么是 OpenResume ? OpenResume 是一个功能强大的开源简历生成器和简历解析器。OpenResume 的目标是为每个人提供免费的现代专业简历设计,让任何人都能充满信心地申请工作。 OpenResume 有 5 个核心特点: 特征描述1. 实时UI更新当您输入简历…

如何去掉图片上的水印?这三种去水印的方法帮你解决!

当我们从网上看到喜欢的图片,想要保存下来作为头像或者插入到工作汇报中时,却发现下载的图片带有水印。这不仅影响了图片的美观,还可能对图片的可用性造成影响。那么,如何去掉图片上的水印呢? 实际上,现在市面上的很多…

【项目管理】PMO技能树21项参照

导读:PMO技能树让你能够有全局视野,让你对照着检查自己的能力是否掌握。技能树提供了构建个人知识体系参照和地图导航,不至于迷失方向。 目录 1、PMO层次概览 2、技能树 2.1 项目管理流程 2.2 项目组合管理 2.3 风险管理 2.4 项目资源管…

高品质建筑红模板与耐久黑色覆膜清水模板:建筑质量的双重守护者

高品质建筑红模板,是现代建筑领域中不可或缺的利器。其承载着创新设计与高效施工的双重使命,在工地建筑需求中占据着重要地位。而耐用黑色覆膜清水模板,则是建筑领域中的隐形英雄,为建筑结构提供了可靠的支撑和保护。这两者的结合…

maptalks三维地图网址

三维 地址: http://examples.maptalks.com/examples/cn/gltf/gltf-marker/shader

typora使用PicGo自动上传图片到chevereto图床

typora使用PicGo自动上传图片到chevereto图床 近期发现,gitee图床不能用了。github又涉及科学上网。搜索了开源图床方案,找到了chevereto,使用起来还不错。分享给大家。 文章目录 typora使用PicGo自动上传图片到chevereto图床chevereto图床安…

产品经理必备技能:如何快速锁定种子用户群体?

大家好,我是小米,一名热爱技术、热衷分享的90后小青年。今天我们要探讨的话题是一个在产品经理面试中经常被问到的问题:“产品上线后的种子用户该如何获取?”作为一个热爱挑战、乐于探讨的小伙伴,我将和大家分享一些我…

开源与闭源:创新与安全的平衡

目录 一、开源和闭源的优劣势比较 一、开源软件的优劣势 优势 劣势 二、闭源软件的优劣势 优势 劣势 二、开源和闭源对大模型技术发展的影响 一、机器学习领域 二、自然语言处理领域 三、数据共享、算法创新与业务拓展的差异 三、开源与闭源的商业模式比较 一、盈…

基于供需算法优化概率神经网络PNN的分类预测 - 附代码

基于供需算法优化概率神经网络PNN的分类预测 - 附代码 文章目录 基于供需算法优化概率神经网络PNN的分类预测 - 附代码1.PNN网络概述2.变压器故障诊街系统相关背景2.1 模型建立 3.基于供需优化的PNN网络5.测试结果6.参考文献7.Matlab代码 摘要:针对PNN神经网络的光滑…

C语言--从键盘输入10个数字放在数组中,并输出

用scanf读取数字的时候要注意,可以输入一个数字,按一下回车,输入一个数字,按一下回车,也可以一次性输入完10个数据。(中间可以用空格隔开,系统会自动识别) 输出一:每按下一个数字&am…

redis实战篇03

附近的商户 我们利用Redis的GEOHash来完成对于地理坐标的操作 UV统计 主要是使用Redis来完成统计功能 用户签到 使用Redis的BitMap数据统计功能 好友关注 基于Set集合的关注、取消关注,共同关注等等功能,这一块知识咱们之前就讲过,这次…

虚拟机配置完NAT模式之后可以和主机ping通但是ping 百度显示:网络不可达

linux网络配置看这:http://t.csdnimg.cn/KRami 如果网关为空,配置网关之后重启即可

章鱼网络在 NEARCON23 发布 Octopus 2.0

香港时间2023年11月8日12点,章鱼网络举行第15期 Community Call。 我们在10月8日庆祝了章鱼网络主网上线二周年,并参加了激动人心的 Cosmoverse2023 活动。最重要的是,我们在 Octopus 2.0 的开发中取得了重大进展。 11月8日 Community Call …

es 算法函数 有点不太懂了没有大神给指点一下

我先说一下我对算法分析的理解 算法函数,我们使用算法函数给指定的数据提高对应的值的方式 比如我现在要给一家酒店排名提高排名,我们可以利用算法函数,提高酒店排名,因为酒店的名称 相关算法的使用场景 在使用的时候出现了这…
最新文章