正式宣布: Clean DDD

B站影视 内地电影 2025-03-27 09:42 1

摘要:关于DDD的介绍资料,大部分比较抽象和空泛,不具备实操的可行性,无法与读者建立共鸣很多开发者实践DDD的经历,都是在开发框架支持不足的情况下进行的,痛苦的过程和失败的结果,导致其对DDD没有好感

当你看到DDD(Domain-Driven Design)时,是什么感受?我整理下来大致分为三类:

DDD压根没有用

DDD有用,但门槛很高

DDD非常有用

其中持前两种观点的开发者,占了大多数,这种态度的形成,究其原因,大致有两点:

关于DDD的介绍资料,大部分比较抽象和空泛,不具备实操的可行性,无法与读者建立共鸣

很多开发者实践DDD的经历,都是在开发框架支持不足的情况下进行的,痛苦的过程和失败的结果,导致其对DDD没有好感

我作为DDD的支持者和实践者,过去一直在探索一个路径,让DDD的实践落地变得更具普适性,在经历了多年的项目实践,两年左右的内容输出,以及与技术社区开发者的深度交流之后,我认为已经找到了这条路径,就是 Clean DDD。

Clean DDD,是一套建模设计和代码实现的操作方法,它定义了开发者在建模设计和代码实现过程中所需要的必要概念要素,为这些概念要素定义了明确的职责,通过一系列可明确执行的行为原则,帮助开发者设计并开发出符合DDD理念的软件系统。

这里列举出关键核心概念:

聚合

实体

值类型

领域事件与事件处理器

命令与命令处理器

查询(Query)

控制器(Controller)

定时任务

下面是一些关键原则:

聚合之间不相互引用

聚合之间不共享实体

一个命令仅操作一个聚合

一个查询仅从一个聚合中获取数据

聚合之间的相互影响,通过事件的传递实现

定义 Clean DDD 的核心目的有二:

与 传统 DDD 区别开,以降低开发者的排斥心理

通过专属名词,方便交流时更有效地建立认知共识

Clean DDD 与 大家所常说的DDD,有哪些不同呢?大家可以看到,Clean DDD 定义的关键要素,甚至没有出现“领域”一词,我们把 DDD 所提到的概念进行了裁剪,去掉了那些难以共识或者对落地实践没有本质帮助的概念,仅留下实践 DDD 理念所必需的部分,让开发者能够专注在关键问题上,从而提升成功的概率。

传统 DDDClean DDD

Clean DDD 的名词的定义,来自于社区朋友们的灵感,这里的 Clean 也算是来自于 Clean Architecture, 表示简单和整洁,寓意 Clean DDD 对于开发者更友好,更易于落地。

同时我们也发现,Clean Architecture 的代码范式,对于 Clean DDD 的实践非常适配,Clean Architecture的关键概念与Clean DDD的核心要素可以非常准确地对应,因此它可以作为最为推荐的代码落地范式指导。

此外,我们也期望借助 Clean Architecture 的知名度,把 Clean DDD 推广给更多的开发者,帮助更多的团队成功实践落地,最终获得效率收益。

.NET Clean DDD 实践框架: https://netcorepal.github.io/netcorepal-cloud-framework/

Java Clean DDD 实践框架:https://github.com/netcorepal/cap4j

基于 Clean DDD 实战商城项目 d3shop:https://github.com/netcorepal/d3shop

来源:opendotnet

相关推荐