重温DDD领域驱动设计

一个超级简单的DDD领域架构,大致流程步骤有注释 一个超级简单的DDD领域架构,大致流程步骤有注释。有些小细节编写时没有注意,各位略过就行。本模板只做流程复杂业务不包含,让你大致上的理解DDD领域架构,建议配上领域架构图一起看。 立即下载

DDD:指领域驱动设计,是domain driven design的缩写。

介绍DDD基础知识的相关文章很多,本文就不普及相关的基础知识了

  • 《DDD基础知识与总结》
  • 《DDD与分层架构》

1. 初识DDD

脚本式编程(dao+service)与DDD领域驱动模式区别如下:

其每一层的作用范围和含义如下:

1)展现层(Presentation Layer):负责以Restful的格式接受Web请求,然后将请求路由给Application层执行,并返回视图模型(View Model),其载体通常是DTO(Data Transfer Object);

2)应用层(Application Layer):主要负责获取输入,组装上下文,做输入校验,调用领域层做业务处理,如果需要的话,发送消息通知。当然,层次是开放的,若有需要,应用层也可以直接访问基础实施层;

3)领域层(Domain Layer):主要是封装了核心业务逻辑,并通过领域服务(Domain Service)和领域对象(Entities)的函数对外部提供业务逻辑的计算和处理;

4)基础实施层(Infrastructure Layer)主要包含Tunnel(数据通道)、防腐层,Config和Common。这里我们使用Tunnel这个概念来对所有的数据来源进行抽象,这些数据来源可以是数据库(MySQL,NoSql)、搜索引擎、文件系统、也可以是SOA服务等;Config负责应用的配置;Common是通用的工具类。

常见的领域驱动业务调用链过程如下图所示:

调用过程大致如下:

  1. 业务调用方基于网关传入DTO数据,为了便于区分业务场景,将DTO数据又细分为CQE三种模式的数据。
  2. 业务数据传入后,基于Spring Validation等模式做基础数据验证(如必填,格式,大小等基础验证);
  3. 数据进入到Controller层,并调用应用层相关的应用功能;
  4. 应用层不做具体的业务实现,只做编排处理,做业务的流程处理。应用层可做如下操作:
  • 应用层调用防腐层查询其他系统的数据;
  • 应用层调用仓库层查询本系统相关的数据;
  • 应用层调用工厂创建实体(简单实体,可在应用层直接生成);
  • 应用层调用第三方领域服务,实体或聚合根的方法处理业务逻辑;
  • 应用层调用仓库层保存数据;
  1. 工厂创建实体,简单的实体可不基于工厂创建;
  2. 领域层处理实体的行为,核心业务逻辑处理放在领域层,领域层可调用基础层的所有模块处理业务(领域层原则上不直接调用仓库层保存数据,保存数据应该放在应用层调用);
  3. 仓库实现层最终落地数据,进行数据存储(其他层不能直接与Tunnel(数据通道)交互,必须基于仓库层才可以);
  4. 一个业务行为结束后,若产生副作用,再应用层发出事件通知,其他模块再监听处理。(事件归属应用层还是领域层,网上各有不同的方案,本例是放在应用层。领域层本身只是内存化操作。等一个实体行为真正数据存储成功后,再发出事件,便于理解和维护。)
Upwork数据战争:用爬虫与AI预测垄断订单 当普通自由职业者还在“等客户发需求”时,顶尖玩家已用数据预测客户明天需要什么; 当竞争对手熬夜抢单时,你的爬虫早已自动提交提案—— 这不是科幻,而是2025年的现实! 本文将手把手教你用合法工具搭建“数据战情室”,让每个决策都有万亿级数据支撑! 阅读详情

相关推荐

SRRC型号核准的模块豁免规则解析——如何利用完整型模块简化设备认证流程

本文详细解析了SRRC型号核准中模块豁免规则的应用,重点介绍了完整型模块的技术定义、豁免条件及实际应用场景。通过合理利用完整型模块,企业可显著简化设备认证流程,缩短上市周期并降低成本。文章还提供了模块选型指南和常见问题解决方案,帮助工程师高效应对SRRC认证挑战。

weixin_29306011的博客 934

DDD领域驱动设计实战-分层架构及代码目录结构

微服务架构模型有多种:整洁架构、CQRS、六边形架构等,核心理念都是“高内聚低耦合”。而DDD分层架构的出现,使架构边界变得越来越清晰,它在微服务架构模型中,占有重要地位。 DDD分层架构 传统四层架构 将领域模型和业务逻辑分离出来,并减少对基础设施、用户界面甚至应用层逻辑的依赖,因为它们不属业务逻辑。将一个夏杂的系统分为不同的层,每层都应该具有良好的内聚性,并且只依赖于比其自身更低的层。 传统四层架构中,基础层被其它层依赖,理论上它就是核心,但实际上领域层才是软件核心,所以这种依赖有问题。后来采用依赖倒

JavaEdge全是干货的技术号 9540

51单片机也能玩转GC9A01彩屏?超详细移植指南与性能优化技巧

本文详细介绍了如何在51单片机上高效驱动GC9A01彩屏,包括硬件连接优化、SPI模拟驱动、内存管理策略及高级刷新技术。通过分段缓冲、颜色压缩和差异化刷新等技巧,显著提升显示性能,使51单片机也能流畅运行240x240分辨率的彩色TFT屏幕。

hp777的博客 190

DDD(领域驱动设计)架构分层

DDD(领域驱动设计)架构分层 层次说明 common层:主要存放一些全局通用的工具类,常量等信息,被其他有业务操作的模块所依赖 facade层(接口层):主要存放RPC接口的定义,对于一些rpc接口只需要返回其他服务对象信息即可,无需再自己定义对象了,因此引入了其他服务的包 。 application应用层:负责业务的流程编排,调用领域服务。依赖了domain层和 domain领域层:包含领域服务的所有功能,领域层不可以直接依赖其他服务,尽可能的减少对外部的依赖,这里只依赖common层。 adapte

ll1037497262的博客 1874

CATIA CAA开发环境搭建避坑指南:从授权服务到VS配置全流程

本文提供了一份详尽的CATIA CAA开发环境搭建避坑指南,涵盖从授权服务(DSLS)安装、Visual Studio版本匹配与集成配置,到编译调试全流程。重点解析了授权服务无法连接、模块加载失败等典型问题的解决方案,强调版本严格对应与纯英文环境是成功搭建的关键。

redis7keeper的博客 574

大模型训练(1):流水线并行

Gpipe的方法是,在训练时计算和运用的是micro-batch里的均值和方差,但同时持续追踪全部mini-batch的移动平均和方差,以便在测试阶段进行使用。流水线并行的核心思想是:在模型并行的基础上,进一步引入数据并行的办法,即把原先的数据再划分成若干个更小的batch,分批送入GPU进行训练,算一部分就让下一个GPU动起来。从实验结果可知,在关掉NVlinks的情况下,Gpipe一样也能实现随着GPU数量的增加,训练速度也增加的效果。前文说过,随着模型的增加,每块GPU中存储的中间结果也会越大。

呆呆象呆呆的博客 1972

DDD 实践

我们的项目没有完全按照 DDD 的方式来做,因为其实 DDD 在业内用的也不多,并且大家也没有一个统一的共识,有人推崇,有人反对。但是我们还是从 DDD 中吸取了一些精华在使用的,比如分层架构、充血模型、事件驱动以及设计模式等等。

埃泽漫笔 397

【车载以太网】【SOMEIP】Wireshark测试someip

一、 Wireshark SOMEIP plugin 1.1 插件安装 Wireshark插件目录:Help -> About Wireshark -> Folders/Pluginshttps://github.com/jamores/eth-ws-someip 解压后,将所有后缀是lua的文件拷贝到Wireshark安装目录plugins/2.4.10/下。 1.2时间戳调整为UTC显示格式 View -> Time Display Format -> Date and Tim.

专注汽车软件开发、AutoSAR、车载以太网、SOA、EE架构。 9731

领域驱动设计(DDD)架构演进和DDD的几种典型架构介绍(图文详解)

我们生活中都听说了DDD,也了解了DDD,那么怎么将一个新项目从头开始按照DDD的过程进行划分与架构设计呢?一、专业术语各种服务IAAS:基础设施服务,Infrastructure-as-...

1498

手把手教你在openclaw中白嫖英伟达羊毛调用GLM5/Minimax2.1/Kimi K 2.5等模型

本文介绍如何在OpenClaw中免费调用英伟达平台的GLM5、Minimax2.1和Kimi K2.5等模型。通过在openclaw.json配置文件中添加NVIDIA的API信息,设置免费模型参数(如contextWindow和maxTokens),并执行简单命令即可切换默认模型。该方法可节省token消耗成本,最后需重启gateway使配置生效。文中还提供了使用其他API平台时的配置模板。

Science prince的博客 5103

天爱验证码wasm验证码逆向

本文分析了某网站采用WASM加密技术的情况,发现其加密方式主要针对data和轨迹信息,整体加密逻辑变化不大。通过反混淆技术可以还原代码,并确认加密过程分为两步:先对原始参数逐个加密,再调用WASM模块进行最终加密。研究发现关键参数drives和ki都存储在WASM模块内,通过提取wasm_exec.js文件即可直接使用该加密功能。本文仅提供技术研究思路,强调严禁用于任何违法行为。

码王吴彦祖的博客 936

UML图使用详解

文章目录UML图使用总结 UML图使用总结 写博客是为了记住自己容易忘记的东西,另外也是对自己工作的总结,希望尽自己的努力,做到更好,大家一起努力进步! 如果有什么问题,欢迎大家一起探讨,代码如有问题,欢迎各位大神指正! 给自己的梦想添加一双翅膀,让它可以在天空中自由自在的飞翔! ...

smilehappiness的博客 5217

解码器选型参数,结构原理,工艺与注意问题总结

解码器芯片(Decoder Chip)是电子设备中的一个重要组件,通常用于处理、解释和输出存储在某种编码格式中的数据或信号。本文对解码器的工作原理,结构特点,工艺流程,选型参数及设计注意事项进行总结。

fydar的博客 1172

如何使用 DSL 实现 DDD 的快速落地

开发大型软件最难的部分并不是实现,而是要深刻理解它所服务的现实世界的领域。领域驱动设计(Domain-Driven Design,DDD)是一种处理高度复杂领域的愿景(Vision)和方...

程序猿DD 1027

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

使用DSL实现DDD快速落地

开发大型软件最难的部分并不是实现,而是要深刻理解它所服务的现实世界的领域。领域驱动设计(Domain-Driven Design,DDD)是一种处理高度复杂领域的愿景(Vision)和方法...

华章IT官方博客 1577

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

这些都搞不明白,还想要落地DDD, 像话么?

开发大型软件最难的部分并不是实现,而是要深刻理解它所服务的现实世界的领域。领域驱动设计(Domain-Driven Design,DDD)是一种处理高度复杂领域的愿景(Vision)和方法,它主张在软件项目中把领域本身作为关注的焦点,维护一个对领域有深度认知的软件模型。 领域驱动设计(DDD),其实就是以领域模型驱动软件设计。要理解 DDD,关键是理解什么是 DDD 所指的领域模型,但在此之前,还是应该先认识一下软件开发的过程。然后,基于此认识重温一下 DDD 在战术以及战略层面的若干关键概念。 .

有才而性缓,定属大才。有智而气和,斯为大智。 468

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

DDD的守护者:Factory模式深度解析与实战

只有当创建的复杂性——无论是源于内部逻辑的增长,还是外部依赖的引入——真正成为一个问题时,才将它重构为一个独立的、可注入依赖的工厂服务。当系统需要引入新的产品类型时,只需添加一个新的具体产品类和一个对应的具体创建者子类,而无需修改任何现有的客户端代码。我们探讨了它的核心职责、两种主流实现方式,并通过一个详尽的案例展示了其在真实世界中的应用,最后还阐明了它与其他模式的协作关系和设计最佳实践。不变量(Invariant)是DDD中的一个核心概念,它指的是在任何时候都必须为真(保持一致)的业务规则或条件 15。

qq_29328443的博客 1116

ABP领域层知识回顾之---实体

标题:重温ABP领域层 1. 前言  最近一段时间一直在看《ABP的开发指南》(基于DDD的经典分层架构思想)。因为之前一段时间刚看完《领域驱动设计:软件核心复杂性应对之道》,概念比较多,看着有点空。于是拿起了这本书。应该说是不是书, 只是一个PDF版的开发指南。于是乎,就开始了。好了,废话不多说,首先是ABP领域层的结构介绍,如下图所示: 从图中可以看到,ABP的领域层分为 实体...

dienen0325的博客 276

DDD与Spring Data JPA实战:领域模型持久化与聚合生命周期管理

在软件架构中,对象关系映射(ORM)是一种将面向对象模型与关系数据库进行映射的技术,其核心原理是通过元数据描述对象与表之间的对应关系,实现数据的持久化与检索。这项技术的核心价值在于解耦业务逻辑与数据访问细节,让开发者能够以面向对象的方式操作数据,提升代码的可维护性和可移植性。在实际应用场景中,ORM常与领域驱动设计(DDD)结合,通过Repository模式封装数据访问逻辑,确保领域模型的纯粹性。本文聚焦于如何利用Spring Data JPA的级联操作与懒加载机制,高效管理聚合根及其内部对象的完整生命周期

weixin_30333885的博客 488

AI时代:DDD领域驱动建模与Ontology语义建模的区别

摘要 本文对比分析了领域驱动设计(DDD)与本体论建模(Ontology)两种业务系统建模方法的本质差异。DDD采用代码建模范式,通过充血对象和限界上下文在微服务内部构建精确的业务规则,关注"逻辑的深度";而Ontology采用语义建模范式,通过对象类型、链接类型和动作类型构建企业级知识图谱,关注"语义的广度"。二者的核心差异体现在:DDD聚焦局部逻辑自洽,Ontology侧重全局语义统一;DDD以程序代码为载体,Ontology以平台元数据为载体;DDD采用实体本体论,Ontology采用关系/过程本体论

417

双非大三勇闯实习之总结

此外,在自己的项目中实现了 Redis 分布式锁,使用用户唯一标识作为 Redis 的 key,将 JVM ID 作为 value 存储,在查询用户唯一标识之前上锁,插入数据完成后解锁。今天主要编写了学长布置的任务,学到了在编写关联表的更新(update)业务时,首先需要删除关联表中的数据,然后进行插入操作。以前只是了解过它的概念,今天终于在实际工作中使用了一次,才真正理解了它的强大和灵活,代码的结构也变得更简洁了。以后写好接口了最好自己测明白了再给前端,数据库内容也弄的好好的方便前端使用,不要麻烦别人!

2201_75420324的博客 971

关于领域建模时考虑用户需求的出发点的理解

摘自http://www.jdon.com/42751 最近又重温了领域驱动设计的原著,有了一些新的理解。现在我觉得我能更好地理解jdon007之前说的下面这段话了。 “用 户需求”不能等同于“用户”,捕捉“用户心中的模型”也不能等同于“以用户为核心设计领域模型”。 《老子》书中有个观点:有之以为利,无之以为用。在这里,有之利,即建立领域模型;无之用,即包容用户需求。举些例子,...

talentluke的专栏 276

贝叶斯网络实战:用Python代码还原『赛马情报』概率题

本文通过一个经典的“赛马情报”概率问题,详细演示了如何使用Python和pgmpy库构建贝叶斯网络模型。文章从问题定义、网络建模、参数设定入手,逐步讲解了变量消元法的原理,并提供了完整的代码实现来计算在获得不完全可靠情报后更新赛马获胜概率的过程。该实战案例清晰地展示了贝叶斯网络如何形式化不确定性推理,将理论转化为可执行的程序,为数据分析与机器学习中的概率推断提供了实用参考。

desk3的博客 428

领域驱动设计之代码优先-领域层设计-1 (翻译)

1.- 领域       本节描述了领域逻辑层的架构和设计领域层时需要考虑的重要准则。 领域层负责展示业务,业务流程的状态和领域规则的实现。也应该包括反映业务流程的状态,甚至 当技术存储的细节交给较低层的基础设施(仓储库等)时。 ”领域模型“层是软件的核心。       该层的足见实现了系统的核心功能并封装了所有相关的业务逻辑(在DDD术语中通常叫领域逻辑)。一般的,领域层通常包含实现领域逻

gj2233的专栏 1611

Java技术进阶推荐书单

1.启蒙篇 首先推荐的两本书是Java核心技术,这一套书是获得了第十三届Jolt生成效率大奖,大学的时候几乎是计算机学院的学生爱好Java编程的都会买这两本书进行扫盲。而且这两本书会随着JDK的版本迭代会印刷新的版本,目前最新的已经是11版本了。这两本书系统全面讲解Java语言的核心概念、语法、重要特性和开发方法。 《Java核心技术 卷I 基础知识》 卷I主要介绍Java语言基础知识的专业级详解,包括写Java代码的基本技术、习惯用法和实践,利用接口、lambda表达式和内部类的功能,有效的异常处理

Discovery的专栏 2541

【阿里开发者】2018-2022年精选文章-后端篇

代码重构:面向单元测试从业务开发中学习和理解架构设计深度解读 RocketMQ 存储机制提升Java字符串编码解码性能的技巧解决微服务架构下流量有损问题的实践和探索淘系用户平台技术团队单元测试建设异步任务处理系统,如何解决业务长耗时、高并发难题?Redis消息队列发展历程一文搞懂redis系统性能分析从入门到进阶领域驱动编程,代码怎么写?Java应用结构规范MySQL 深潜 - MDL 锁的实现与获取机制并发-分布式锁质量保障总结重新认识访问者模式:从实践到本质谈一谈单元测试Redis 7.0 Multi

后端研发工程师Marion的博客 1693
上一篇: 带你玩转 Docker 容器技术之镜像
下一篇: RabbitMQ多种问题出现的解决方案
Java_ttcd
博客等级 码龄4年 198粉丝 190原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值