《实现领域驱动设计》笔记(1)-开卷有益总览

在线体验各类最新模型,更有模型 免费Token 额度领取!
立即体验
简介: 最近一鼓作气买了两本久负盛名的书《领域驱动设计 软件核心复杂性应对之道 》和《实现领域驱动设计》。开卷有益,在学习的途中,做些笔记巩固下,并记录下感想。先来说下《实现领域驱动设计》,大致翻了翻,本书并不是《算法导论》那种很高端难懂的类型,是属于思考实践总结类型的。

  最近一鼓作气买了两本久负盛名的书《领域驱动设计 软件核心复杂性应对之道 》和《实现领域驱动设计》。开卷有益,在学习的途中,做些笔记巩固下,并记录下感想。先来说下《实现领域驱动设计》,大致翻了翻,本书并不是《算法导论》那种很高端难懂的类型,是属于思考实践总结类型的。我相信,一章一章看下去,会有很多收获的。本篇文章是个开篇说明,并不深究具体细节,讲述如何使用《实现领域驱动设计》。

DDD总览

   DDD的通用语言(Ubiquitous Language)作用于某个限界上下文(Bounded Context),它对于领域建模是非常重要的。

 

战略建模

限界上下文是一种概念上的边界,领域模型方便工作于其中。同时,限界上下文为通用语言提供了一套环境,项目成员通过通用语言来表达软件模型,如流程图:

 
 

架构

 

战术建模

站术设计的一个重要模式是聚合(Aggregate),聚合可以由单个实体(Entity)组成,也可以由一组实体和值对象(Value Object)组成,此时我们必须在聚合的整个生命周期保证事务上的一致性。

聚合实例通过资源库(Repository)进行持久化,另外对聚合的查找和获取也通过资源库完成。如图,两个聚合类型,它们拥有各自的事务一致性的边界。

 

在领域模型中,有些业务操作并不能自然的放在实体或值对象上,此时我们可以使用无状态的领域服务(Domain Service),领域服务执行特定与领域的操作,其中可能涉及多个领域对象

 

领域事件(Domain Event)表示领域模型中发生的重要事件。有多种方式可以对领域事件进行建模。在对聚合进行命令操作时,聚合本身将发布领域事件。

 

我们通常忽略了模块(Module),但是正确的设计模块同样重要,模块内包含的领域对象应该是内聚在一起的。

 

以上内容主要提到了通用语言,限界上下文,上下文映射图,聚合,实体,资源库,值对象,领域服务,领域事件,模块等概念。

书上总结内容完毕。

DDD不是无中生有,自动产生的。它来源于业务专家或软件开发师在沟通提炼业务的基础上归纳概括而来。所以在看书的过程中,会产生这个例子我见过,我用了相同的方法实现,感同身受的感受。也许当时你只是把问题解决了,并没有引起你多大的深思。但有些人,有些思想家遇到了很多的例子,成功或失败的例子,他们思考总结,写的多了,最后成了一本书。嘭的一声巨响,一个领域专家诞生了!

本篇完毕,谢谢观看。

相关文章
|
缓存 前端开发 中间件
DDD 领域驱动设计落地实践系列:工程结构分层设计
前面几篇文章中,笔者给大家阐述了 DDD 领域驱动设计的三大过程,重点围绕如何通过战略设计与战术设计进行 DDD 落地实践进行了详细的讨论,但是还没有涉及到工程层面的落地。实际上所有的这些架构理论到最后都是为了使得我们代码结构更加清晰,从而开发出 bug 少、扩展性强、逻辑清楚的应用。因此本文就是为了解决 DDD 领域驱动落地实践最后一公里问题,将我们分析出来的领域模型通过与工程结构的映射实现真正的落地。
DDD 领域驱动设计落地实践系列:工程结构分层设计
|
设计模式 JSON 架构师
你真的需要防腐层吗?DDD 系统间的7种关系梳理与实践
当提到系统间交互的时候,人们都会想到大名鼎鼎的防腐层,用来防止其他系统的模型变更对本系统造成影响。但是在实践这个模式的过程中,我们常常会遇到问题。此时我们也应该考虑下其他的系统交互方式。
28522 12
你真的需要防腐层吗?DDD 系统间的7种关系梳理与实践
|
消息中间件 网络协议 前端开发
殷浩详解DDD:如何避免写流水账代码?
在日常工作中我观察到,面对老系统重构和迁移场景,有大量代码属于流水账代码,通常能看到开发在对外的API接口里直接写业务逻辑代码,或者在一个服务里大量的堆接口,导致业务逻辑实际无法收敛,接口复用性比较差。所以本文主要想系统性的解释一下如何通过DDD的重构,将原有的流水账代码改造为逻辑清晰、职责分明的模块。
殷浩详解DDD:如何避免写流水账代码?
|
设计模式 弹性计算 人工智能
阿里技术专家详解DDD系列 第四讲 - 领域层设计规范
在一个DDD架构设计中,领域层的设计合理性会直接影响整个架构的代码结构以及应用层、基础设施层的设计。但是领域层设计又是有挑战的任务,特别是在一个业务逻辑相对复杂应用中,每一个业务规则是应该放在Entity、ValueObject 还是 DomainService是值得用心思考的,既要避免未来的扩展性差,又要确保不会过度设计导致复杂性。
|
SQL 缓存 Java
殷浩详解DDD系列 第三讲 - Repository模式
# 第三讲 - Repository模式 **写在前面** 这篇文章和上一篇隔了比较久,一方面是工作比较忙,另一方面是在讲Repository之前其实应该先讲Entity(实体)、Aggregate Root(聚合根)、Bounded Context(限界上下文)等概念。但在实际写的过程中,发现单纯讲Entity相关的东西会比较抽象,很难落地。所以本文被推倒重来,从Repository
39142 8
|
微服务 测试技术 Java
阿里技术专家详解 DDD 系列- Domain Primitive
关于DDD的一系列文章,希望能继续在总结前人的基础上发扬光大DDD的思想,但是通过一套我认为合理的代码结构、框架和约束,来降低DDD的实践门槛,提升代码质量、可测试性、安全性、健壮性。
63286 17
阿里技术专家详解 DDD 系列- Domain Primitive
|
Java Shell Linux
Android——编译(一):编译make的基础知识
Android——编译(一):编译make的基础知识
713 0
|
4月前
|
存储 并行计算 数据可视化
大模型应用:GPU的黑盒拆解:可视化看透大模型并行计算的底层逻辑.67
本文深入解析GPU核心架构与大模型算力优化原理,涵盖SM流式多处理器、显存、显存控制器、PCIe接口等关键组件,详解线程级/指令级并行及张量核心加速机制,并通过全流程耗时分析与任务拆分可视化,揭示“数据传输是主要瓶颈”的核心结论,助力高效部署大模型。
690 6
|
监控 Serverless 开发者
开发者如何用好云数据传输CDT
【10月更文挑战第22天】开发者如何用好云数据传输CDT
677 4

热门文章

最新文章