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).认证授权等非业务逻辑类关注点

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

 

备选答案

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

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

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

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

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

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

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

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

posted @ 2024-05-21 18:27  Karl_Albright  阅读(20)  评论(0编辑  收藏  举报