首页 > 其他分享 >DDD 笔记

DDD 笔记

时间:2024-05-21 18:29:55浏览次数:24  
标签:服务 业务 笔记 领域 事件 应用服务 DDD

1. 简单讲讲DDD,和DDD哪些优势

领域驱动设计。就是通过领域来指导软件设计,是一种十分抽象的软件设计思想,它主要分为战略设计和战术设计

战略方面,通过事件风暴进行领域模型的划分,划分出核心域,子域,支撑域,定义通用语言,划分出界限上下文。

在战术设计方面,ddd将架构分层,“松耦合,高内聚”是架构设计的整体思想。按照DDD思想,可以分为领域层,基础设施层,应用层,接口层。

 

2. DDD都有哪些分层结构,分别放什么

1). 基础设施层 放数据库迁移项目,redis缓存等,放一些第三方服务,数据库连接等

2). 应用层 Dto传输对象、AutoMapper映射等

3). 领域层 实体、值对象、领域服务接口、仓储接口、领域服务等

4). 展示层 前台页面、Swagger、controller等

 

3. DDD中什么是领域事件、什么是集成事件

领域事件(Domain Event)是在一个特定领域由一个动作触发的,是发生在过去的行为产生的事件(行为可以是人操作的,也可以是系统自动的) ;

我认为领域事件的主要目的是为了让代码更加容易维护,让业务更加容易扩展,也就是对代码业务层面的优化

集成事件(IntegrationEvent)同样也是指在过去的行为产生的事件(行为可以是人操作的,也可以是系统自动的),一般用于跨多个微服务或外部系统。

对于集成事件的主要目的我认为就是为了让服务模块之间或系统之间的对接耦合性变低,只要约定好事件类型,发事件模块和处理事件的模块就会有很少对接,便于扩展和维护。

 

4. 什么是应用服务,什么是领域服务

在DDD中,领域模型并不直接接收外界的请求,而是通过应用服务向外提供业务功能。此时的应用服务就像酒店的前台一样,对外面对客户,对内则将客户的请求代理派发给内部的领域模型。

应用服务至少包含这些:1).数据的网络传输、2).应用协议的解析、3).对业务用例的协调、4).事务处理、5).业务数据的持久化、6).日志、7).认证授权等非业务逻辑类关注点

领域服务 代表领域概念,它们是存在于问题域中的行为,它们产生于与领域专家的对话中,并且是领域模型的一部分。简单的说就是处理业务逻辑的

 

备选答案

应用服务和领域服务的区分

应用服务里不要处理业务逻辑,只在领域服务里处理业务逻辑。

领域服务掌握领域知识,而应用服务只是对领域服务的编排。

应用服务是领域服务的客户方,也就是说应用服务会调用领域服务里的方法。

当领域中的某个操作过程不属于实体或者值对象的职责时,需要将个操作放在领域服务中。而且确保领域服务是无状态的(这句话很有意思,也就是说领域服务中不应该有任何记录状态的行为,在任何情况下调用这个服务,它都不会有副作用,也就是说它是个纯内存操作)。

领域服务中包含的是业务逻辑,而应用服务关注的应该是安全和事务等非业务逻辑。

对事务的管理绝对不能放在领域服务层,事务管理需要放在应用服务层。因为和领域模型相关的操作的粒度都很细,无法用于事务管理。而且领域模型也不应该意识到事务的存在。

通常的可以放在应用服务中的逻辑有:参数验证、错误处理、监控日志、事务处理、认证与授权。

标签:服务,业务,笔记,领域,事件,应用服务,DDD
From: https://www.cnblogs.com/Cxiaoao/p/18204726

相关文章

  • 线性代数笔记——行列式(1)
    1.n级排列:由1,2,3,...,n组成的一个有序数组  n级排列的个数有n!=n(n-1)(n-2)...3*2*12.逆序:大数排在小数前面逆序数:逆序的总数如4213的逆序数    N(4213)=3+1+0+0=4如标准排列的逆序数为   N(123....n)=0n,n-1,n-2,...,3,2,1的逆序数为N(n(n-1)(n......
  • 《从小工到大工》阅读笔记
         在老师的推荐之下,我阅读了这本书这本书的作者是AndrewHunt和DavidThomas,他们是两位经验丰富的软件开发者。他们在书中分享了自己的经验和见解,帮助读者成为更好的程序员。这本书的主要内容包括软件开发的基本原则、编程技巧、代码质量、工作流程等方面。   ......
  • Asp-Net-Core开发笔记:给SwaggerUI加上登录保护功能
    前言#在SwaggerUI中加入登录验证,是我很早前就做过的,不过之前的做法总感觉有点硬编码,最近.Net8增加了一个新特性:调用MapSwagger().RequireAuthorization来保护SwaggerUI,但官方的这个功能又像半成品一样,只能使用postmancurl之类的工具带上Authorizationheader来请......
  • Asp-Net-Core开发笔记:使用ActionFilterAttribute实现非侵入式的参数校验
    前言#在现代应用开发中,确保API的安全性和可靠性至关重要。面向切面编程(AOP)通过将横切关注点(如验证、日志记录、异常处理)与核心业务逻辑分离,极大地提升了代码的模块化和可维护性。在ASP.NETCore中,利用ActionFilterAttribute可以方便地实现AOP的理念,能够以简洁、高效的方式进行......
  • 《构建之法》阅读笔记之二
    第二部分:实践指南主题: 构建的实际应用内容概要:构建过程: 详细介绍了构建过程中的各个阶段,包括需求分析、设计、开发、测试等。对每个阶段的任务和方法进行了具体的描述,例如需求分析阶段可以采用用户故事、用例分析等方法;设计阶段可以采用面向对象设计、设计模式等方法。构......
  • 《构建之法》阅读笔记之一
    第一部分:理论基础主题: 构建的概念与原理内容概要:构建的本质: 构建是指通过组合和搭建各种元素来创造新的事物或系统。作者解释了构建的概念,强调了它在现代技术和工程领域中的重要性。构建不仅仅是建造物理产品,也包括软件、服务、组织结构等方面的构建。构建的原理: 介绍了......
  • 《构建之法》阅读笔记之三
    第三部分:进阶探索主题: 构建的未来发展内容概要:新技术趋势: 探讨了当前和未来构建领域的新技术趋势,如人工智能、区块链、物联网等。分析了这些新技术对构建方式和方法的影响,以及如何利用这些技术来创新和优化构建过程。构建文化: 强调了构建文化的重要性,包括团队协作、创新......
  • powershell7升级笔记
    https://learn.microsoft.com/zh-cn/powershell/scripting/install/installing-powershell-on-windows?view=powershell-7.3#msi安装powershell7法一:推荐MSI安装方式,全打钩,可以自动配置环境变量和右键菜单https://learn.microsoft.com/zh-cn/powershell/scripting/install/i......
  • 梦断代码阅读笔记01
    梦断代码阅读笔记01项目启动在过去的项目启动阶段,我通常会直接进入编写代码或者简单构思功能实现方式,没有深度考虑项目的全局目标和详细的需求分析。此外,我在团队组建时并没有特别关注成员的技能搭配和工作风格,这常常导致后续开发过程中的沟通不畅和效率低下。这样做有很多不足......
  • tensorflow.js示例笔记 - predict-download-time
    预测下载时间。<!DOCTYPEhtml><html><head><title>predict-download-time</title><style>canvas{border:1pxsolid#d3d3d3;}</style><sc......