(二)光头整洁架构(Domain Event单体/权限/鉴权AOP+特性)

发布于:2025-08-31 ⋅ 阅读:(17) ⋅ 点赞:(0)


项目地址

  • 教程作者:
  • 教程地址:
  • 代码仓库地址:
  • 所用到的框架和插件:
dbt 
airflow

一、Domain Event(单体版本)

1.1 创建

在这里插入图片描述

1. IDomain Event事件标记

  • 标记了该接口,表示该事件可以被MediaR发布
    在这里插入图片描述

2. 删除事件

  • 该事件没有别的功能,只是一条SubscriptionID

在这里插入图片描述

3. Entiy类(核心)

  1. abstract 抽象父类,表示只能被子类继承
  2. init关键字
  3. readonly关键字
  4. 空构造函数
    在这里插入图片描述

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. 当前的处理流程

  1. 发起原始的删除请求
  2. 原始的删除请求里,调用实体方法,发布删除的领域事件
    在这里插入图片描述

2. UnitOfWork保存之前加入http队列

  • 只合适单体:由于这个队列是一个http里的队列,作用是暂存当前领域事件列表
    在这里插入图片描述

3. 通过中间件发布事件

  • 通过中间件使用mediaR发布httpContext里的队列(内存/MQ)
    在这里插入图片描述

4. 中间件注册

在这里插入图片描述

二、权限

2.1 User Domain

1. User的Domain

  • 核心:
    1. user的密码是加密的
    2. 通过Domain方法IsCorrectPasswordHash对比密码
    3. 通过领域方法CreateParticipantProfile添加ID来分配角色
    4. 通过User拥有的id是否为空,来判断用户的角色列表
      在这里插入图片描述
  • 类型的Enum

在这里插入图片描述

2. IPasswordHasher接口

  • 主要给Domain提供用于判断密码的hash是否相等的服务,通过依赖注入

网站公告

今日签到

点亮在社区的每一天
去签到