项目地址
- 教程作者:
- 教程地址:
- 代码仓库地址:
- 所用到的框架和插件:
dbt
airflow
一、Domain Event(单体版本)
1.1 创建
1. IDomain Event事件标记
- 标记了该接口,表示该事件可以被MediaR发布
2. 删除事件
- 该事件没有别的功能,只是一条
SubscriptionID
3. Entiy类(核心)
- abstract 抽象父类,表示只能被子类继承
- init关键字
- readonly关键字
- 空构造函数
4. Admin 类(Rich)
- 抽象父类继承
- base的用法
- 原始删除逻辑的发生地
1.2 领域事件划分
1. admin删除自己领域逻辑
- 之前,我们删除admin的时候,直接在admin的删除的handler将所有例如,订阅,gym里所有相关的逻辑都删除,并且需要调用其他领域的数据库方法
- 修改后:只删除自己领域的逻辑,删除后,只通过domain event发布删除的消息
2.gym删除逻辑
- 将上面的④删除gym的逻辑,放在自己领域事件里处理
1.3 发布和处理
- 方法1:①发起command;②使用拦截器在save之前发布领域事件,并且由其他handler处理;③处理完成之后返回用户
- 方法2:①发起command;②立即返回删除后的结果;并且发布领域事件;③之后,再有各个handler处理
1. 当前的处理流程
- 发起原始的删除请求
- 原始的删除请求里,调用实体方法,发布删除的领域事件
2. UnitOfWork保存之前加入http队列
- 只合适单体:由于这个队列是一个http里的队列,作用是暂存当前领域事件列表
3. 通过中间件发布事件
- 通过中间件使用mediaR发布httpContext里的队列(内存/MQ)
4. 中间件注册
二、权限
2.1 User Domain
1. User的Domain
- 核心:
- user的密码是加密的
- 通过Domain方法
IsCorrectPasswordHash
对比密码 - 通过领域方法
CreateParticipantProfile
添加ID来分配角色 - 通过User拥有的id是否为空,来判断用户的角色列表
- 类型的Enum
2. IPasswordHasher接口
- 主要给Domain提供用于判断密码的hash是否相等的服务,通过依赖注入