学习:ddd领域驱动设计

xdyin xdyin     2023-03-09     232

关键词:

DDD:Domain-driven Design(领域 - 驱动 -> 设计)

->领域驱动领域模型设计

->领域模型驱动代码实现

 

摘自网络(汤雪华的博客

《概念总结》

    1. 领域就是问题域,有边界,领域中有很多问题;
    2. 任何一个系统要解决的那个大问题都对应一个领域;
    3. 通过建立领域模型来解决领域中的核心问题,模型驱动的思想;
    4. 领域建模的目标针对我们在领域中所关心的问题,即只针对核心关注点,而不是整个领域中的所有问题;
    5. 领域模型在设计时应考虑一定的抽象性、通用性,以及复用价值;
    6. 通过领域模型驱动代码的实现,确保代码让领域模型落地,代码最终能解决问题;
    7. 领域模型是系统的核心,是领域内的业务的直接沉淀,具有非常大的业务价值;
    8. 技术架构设计或数据存储等是在领域模型的外围,帮助领域模型进行落地;

《拆分领域》

  领域建模的基础是要先理解领域,让自己成为领域专家。如果做到了这点,我们就打好了坚实的基础了。

但是,有时一个领域往往太复杂,涉及到的领域概念、业务规则、交互流程太多,导致我们没办法直接针对这个大的领域进行领域建模。

所以,我们需要将领域进行拆分,本质上就是把大问题拆分为小问题,然后各个击破的思路。

然后既然把一个大的领域划分为了多个小的领域(子域),那最关键的就是要理清每个子域的边界;然后要搞清楚哪些子域是核心子域,哪些是非核心子域,哪些是公共支撑子域;然后,还要思考子域之间的联系是什么。

那么,我们该如何划分子域呢?我的个人看法是从业务相关性的角度去思考,也就是我们平时说的按业务功能为出发点进行划分。

《细化子域》

    1. 梳理领域概念:梳理出领域内我们关注的概念、概念的关系,并统一交流词汇,形成统一语言;
    2. 梳理业务规则:梳理出领域内我们关注的各种业务规则,DDD中叫不变性(invariants),比如唯一性规则,余额不能小于零等;
    3. 梳理业务场景:梳理出领域内的核心业务场景,比如电商平台中的加入购物车、提交订单、发起付款等核心业务场景;
    4. 梳理业务流程:梳理出领域内的关键业务流程,比如订单处理流程,退款流程等;

  *关于领域概念的梳理,我觉得可以采用四色原型分析法

《领域模型设计》

  DDD原著中提出了很多实用的建模工具:聚合、实体、值对象、工厂、仓储、领域服务、领域事件。

    1. 划分好边界上下文,通常每个子域(sub domain)对应一个边界上下文(bounded context),同一个边界上下文中的概念是明确的,没有任何歧义;
    2. 在每个边界上下文中设计领域模型,具体的领域模型设计方法有很多种,如以场景为出发点的四色原型分析法,或者我早期写的这篇文章;这个步骤最核心的就是找出聚合根,并找出每个聚合根包含的信息;
    3. 关于如何设计聚合,可以看一下我写的这篇文章
    4. 画出领域模型图,圈出每个模型中的聚合边界;
    5. 设计领域模型时,要考虑该领域模型是否满足业务规则,同时还要综合考虑技术实现等问题,比如并发问题;领域模型不是概念模型,概念模型不关注技术实现,领域模型关心;所以领域模型才能直接指导编码实现;
    6. 思考领域模型是如何在业务场景中发挥作用的,以及是如何参与到业务流程的每个环节的;
    7. 场景走查,确认领域模型是否能满足领域中的业务场景和业务流程;
    8. 模型持续重构、完善、精炼;

《领域模型的核心作用》

    1. 抽象了领域内的核心概念,并建立概念之间的关系;
    2. 领域模型承担了领域内的状态的维护;
    3. 领域模型维护了领域内的数据之间的业务规则,数据一致性;

我对领域驱动设计(ddd)的学习成果

领域驱动设计之领域模型2004年EricEvans发表Domain-DrivenDesign–TacklingComplexityintheHeartofSoftware(领域驱动设计),简称EvansDDD。领域驱动设计分为两个阶段:1.以一种领域专家、设计人员、开发人员都能理解的“通用语言”作为相互交... 查看详情

ddd(领域驱动设计)从入门到精通

参考技术A一、DDD领域驱动设计-基本原理1、DDD领域驱动设计-入门介绍2、DDD领域驱动设计-基本概念    2.1.DDD领域驱动设计-领域和子域    2.2.DDD领域驱动设计-限界上下文    2.3.DDD领域驱... 查看详情

ddd(领域驱动设计)思想解读及优秀实践

...想解读及优秀实践第1章领域驱动设计的背景和来源理解学习DDD的必要性,DDD能对我们带来什么帮助,它的核心思想和解决的痛点问题是什么,它的发展历史、现状和未来前景如何?它和现有方法体系的联系和区别... 查看详情

ddd学习笔录——领域驱动设计的常见误区(即错误的理解)

...;它促成了一种新的以领域为中心的思维方式。它是一种学习过程,而非最终目标,这就是DDD的最大优势。任何团队都可以编写一个软件来满足一组用例的需求,但那些将时间和精力花在其正在处理的问题域中的团队则能够持续... 查看详情

领域驱动设计(ddd)实践之路(代码片段)

...也请教过一些资深DDDer,并在项目中实践过。不过在初步学习、实践之后我又带着疑问与自己的思考重新读了一遍相关的著述理论。逐渐领悟到DDD作为一种思想,其实离我们很近。我把自己的学习过程、思考编写成系列文章,与... 查看详情

在领域驱动设计 (DDD) 中建模查找表的实用方法是啥?

...么?【发布时间】:2010-10-2222:47:41【问题描述】:我刚刚学习DDD(EricEvans的书在我面前打开),我遇到了一个我找不到答案的问题。当您只是想获得一个简单的查找记录列表时 查看详情

领域驱动设计实战-ddd

领域驱动设计实战领域驱动(DDD,DomainDrivenDesign)为软件设计提供了一套完整的理论指导和落地实践,通过战略设计和战术设计,将技术实现与业务逻辑分离,来应对复杂的软件系统。本系列文章准备以实战的角度来介绍DDD,首... 查看详情

ddd领域驱动设计基本理论知识总结

 原文:DDD领域驱动设计基本理论知识总结 领域驱动设计之领域模型加一个导航,关于如何设计聚合的详细思考,见这篇文章。2004年EricEvans发表Domain-DrivenDesign–TacklingComplexityintheHeartofSoftware(领域驱动设计),简称EvansDDD... 查看详情

领域驱动设计(ddd)

领域驱动设计在互联网业务开发中的实践领域驱动设计,根本目的在于,系统的高内聚低耦合。通过拆分具体需求,生成核心上下文,各个支撑上下文,上下文之间低耦合。  查看详情

ddd领域驱动设计精要

 本文算是《领域驱动设计》这本书的读书笔记,加上自己的一些读后感。网上有很多这本书的读书笔记,但是都是别人的,不如自己总结的理解深刻。建议大家在读这本书时结合《实现领域驱动设计》一起看,同时,一定要... 查看详情

领域驱动设计(ddd)实践之路:如何设计聚合

...:https://mp.weixin.qq.com/s/oAD25H0UKH4zujxFDRXu9Q作者:wenbozhang【领域驱动设计实践之路】往期精彩文章:《领域驱动设计(DDD)实践之路(一)》主要讲述了战略层面的DDD原则《领域驱动设计(DDD)实践之路(二):事件驱动与CQRS》分析了如何应... 查看详情

ddd「领域驱动设计」分层架构初探(代码片段)

...层架构的一些理解分享给大家,我对于该分层架构还处于学习阶段理解有误的地方请指出。本次会以一个案例来说明各个分层的作用以及他们之间的调用关系,还有本次的重点不在于DDD,因为这个我还未 查看详情

ddd领域驱动设计-ddd概览

参考技术A#DDD概览##启迪领域可以理解为业务,领域专家就是对业务很了解的人。限界上下文也就是微服务的边界,也可以理解为微服务,一个限界上下文=一个微服务。个人理解领域驱动设计就是微服务驱动设计,从战略上先进... 查看详情

浅谈我对ddd领域驱动设计的理解

目录从遇到问题开始DDD切入点1-理解概念什么是领域(Domain)?什么是设计(Design)?什么是驱动(Driven)?概念总结:DDD切入点2-理解领域、拆分领域、细化领域理解领域知识是基础拆分领域细化子域DDD切入点3-领域模型设计领... 查看详情

ddd领域驱动设计(代码片段)

有幸参与了一些领域驱动的项目,读了一些文章,也见识了一些不伦不类的架构,感觉对领域驱动有了更进一步的认识。所以今天跟大伙探讨一下领域驱动设计,同时也对一些想要实践领域驱动设计却又无处下手,或者一些正在... 查看详情

领域驱动设计(ddd)中简单易用的10种技巧

领域驱动设计(DDD),因非常适合与微服务进行配合而闻名,因《领域驱动设计》那本书的难懂而让人望而却步。其实《领域驱动设计》这本书讲的是:以领域为核心,在代码中体现领域的思想,开发人员和领域专家要紧密沟通。... 查看详情

ddd(领域驱动设计)

模型驱动设计(DomainDrivenDesign)模型关系图(Model-DrivenDesign)领域驱动设计中的模型关系图如下:层结构(LayeredArchitecture)UserInterface负责向用户展现信息,并且会解析用户行为,即常说的展现层。ApplicationLayer应用层没有任何的业务逻辑... 查看详情

什么是领域驱动设计 (DDD)? [关闭]

】什么是领域驱动设计(DDD)?[关闭]【英文标题】:WhatisDomainDrivenDesign(DDD)?[closed]【发布时间】:2010-11-1609:10:07【问题描述】:我不断看到DDD(域驱动设计)在文章中被大量使用-我已经阅读了有关DDD的Wikipedia条目,但仍然无法弄... 查看详情