术语表
📖 MediatR 和相关技术的专业术语解释
A
AOP (Aspect-Oriented Programming)
面向切面编程
一种编程范式,通过将横切关注点(如日志、验证、事务)从业务逻辑中分离出来,提高模块化程度。MediatR 的管道行为就是 AOP 的实现方式。
示例: 日志行为、验证行为、事务行为
Aggregate Root
聚合根
领域驱动设计(DDD)中的概念,指一个聚合的入口点。聚合根负责维护聚合内对象的一致性和不变量。
示例: Order(订单)是 OrderItem(订单项)的聚合根
C
CQRS (Command Query Responsibility Segregation)
命令查询职责分离
一种架构模式,将读操作(Query)和写操作(Command)分离,使用不同的模型和处理逻辑。
- Command: 修改状态的操作,不返回数据或只返回简单结果
- Query: 读取数据的操作,不修改状态
优势: 独立优化读写性能、使用不同的数据模型、提高可扩展性
Command
命令
表示意图执行某个操作的请求,通常会改变系统状态。在 MediatR 中通常以 Command 结尾命名。
示例: CreateOrderCommand, UpdateUserCommand, DeleteProductCommand
Correlation ID
关联ID
用于跟踪跨多个服务或组件的请求的唯一标识符。在分布式系统中特别有用。
示例: 每个请求分配一个 GUID,贯穿整个处理流程
D
DDD (Domain-Driven Design)
领域驱动设计
一种软件开发方法,专注于复杂领域的建模。强调领域专家与开发人员的协作,使用 Ubiquitous Language(通用语言)。
核心概念: 实体、值对象、聚合根、领域事件、仓储
Decorator Pattern
装饰器模式
一种结构设计模式,允许在不修改原始类的情况下动态添加行为。MediatR 的管道行为链就是装饰器模式的实现。
示例:
LoggingBehavior → ValidationBehavior → TransactionBehavior → HandlerDependency Injection (DI)
依赖注入
一种设计模式,通过将依赖项从外部注入到类中,而不是由类自己创建,实现松耦合。
示例:
public class OrderHandler
{
private readonly IOrderRepository _repo;
public OrderHandler(IOrderRepository repo) // 通过构造函数注入
{
_repo = repo;
}
}Domain Event
领域事件
表示领域中发生的重要事情。在 MediatR 中通过 INotification 实现。
示例: OrderCreatedEvent, PaymentProcessedEvent, UserRegisteredEvent
DTO (Data Transfer Object)
数据传输对象
用于在不同层之间传输数据的简单对象,不包含业务逻辑。
示例:
public class OrderDto
{
public Guid Id { get; set; }
public string ProductName { get; set; }
public decimal TotalAmount { get; set; }
}E
Event Sourcing
事件溯源
一种架构模式,将状态变化存储为一系列事件,而不是当前状态。可以通过重放事件重建任何时间点的状态。
优势: 完整的审计跟踪、时间旅行查询、自然的事件驱动
H
Handler
处理器
在 MediatR 中,负责处理请求或通知的类。
- Request Handler: 处理
IRequest,实现IRequestHandler<T, R> - Notification Handler: 处理
INotification,实现INotificationHandler<T>
示例: CreateOrderHandler, SendEmailHandler
I
IMediator
中介者接口
MediatR 的核心接口,提供 Send() 和 Publish() 方法。
public interface IMediator : ISender, IPublisher
{
}INotification
通知接口
标记接口,表示一个可以被多个处理器处理的通知(事件)。
示例:
public class OrderCreatedNotification : INotification
{
public Guid OrderId { get; set; }
}IRequest
请求接口
标记接口,表示一个需要被处理的请求。
IRequest: 无返回值IRequest<TResponse>: 带返回值
示例:
public class CreateOrderCommand : IRequest<OrderResult> { }
public class DeleteOrderCommand : IRequest { }IRequestHandler
请求处理器接口
处理 IRequest 的接口。
IRequestHandler<TRequest>: 处理无返回值请求IRequestHandler<TRequest, TResponse>: 处理带返回值请求
示例:
public class CreateOrderHandler : IRequestHandler<CreateOrderCommand, OrderResult>
{
public async Task<OrderResult> Handle(CreateOrderCommand request, CancellationToken ct)
{
// 处理逻辑
}
}ISender
发送者接口
专注于请求/响应模式的接口,提供 Send() 方法。
IPublisher
发布者接口
专注于发布/订阅模式的接口,提供 Publish() 方法。
M
Mediator Pattern
中介者模式
一种行为设计模式,定义一个中介对象来封装对象之间的交互,减少对象之间的直接依赖。
优势: 降低耦合度、集中控制逻辑、易于维护和扩展
Minimal API
最小API
.NET 6+ 引入的一种轻量级 Web API 开发方式,无需控制器类。
示例:
app.MapPost("/orders", async (CreateOrderCommand cmd, IMediator mediator) =>
await mediator.Send(cmd));P
Pipeline Behavior
管道行为
MediatR 中的横切关注点实现机制,通过装饰器模式在请求处理前后插入逻辑。
示例: 日志行为、验证行为、事务行为、缓存行为
Publish/Subscribe
发布/订阅模式
一种消息传递模式,发布者发布消息,多个订阅者接收并处理。在 MediatR 中通过 INotification 实现。
特点: 一对多、解耦、异步
Q
Query
查询
表示读取数据的请求,不修改系统状态。在 MediatR 中通常以 Query 结尾命名。
示例: GetOrderQuery, ListProductsQuery, OrderStatisticsQuery
R
Repository
仓储
DDD 中的概念,提供访问聚合根的抽象接口,隐藏数据持久化细节。
示例:
public interface IOrderRepository
{
Task<Order> GetByIdAsync(Guid id);
Task AddAsync(Order order);
}Request/Response
请求/响应模式
一种通信模式,客户端发送请求,服务器返回响应。在 MediatR 中通过 IRequest<TResponse> 实现。
特点: 一对一、同步或异步、有返回值
S
SOLID Principles
SOLID 原则
五个面向对象设计原则:
- Single Responsibility Principle (单一职责原则)
- Open/Closed Principle (开闭原则)
- Liskov Substitution Principle (里氏替换原则)
- Interface Segregation Principle (接口隔离原则)
- Dependency Inversion Principle (依赖倒置原则)
MediatR 帮助实现这些原则,特别是 SRP、OCP 和 DIP。
Service Lifetime
服务生命周期
依赖注入容器中服务的存活时间:
- Transient: 每次请求创建新实例
- Scoped: 每个作用域(如 HTTP 请求)创建一个实例
- Singleton: 整个应用生命周期共享一个实例
SSE (Server-Sent Events)
服务器推送事件
一种单向实时通信技术,服务器可以向客户端推送数据。MediatR 的流式请求可用于实现 SSE。
T
Thread Safety
线程安全
代码在多线程环境下能正确执行,不会出现竞态条件或数据竞争。
注意: MediatR 的 Handler 默认不是线程安全的,应避免在 Handler 中使用可变共享状态。
U
Unit of Work
工作单元
一种设计模式,维护受业务事务影响的对象列表,并协调变化的写入。
示例: EF Core 的 DbContext 实现了 Unit of Work 模式
Unit Type
Unit 类型
MediatR 中表示"无值"的类型,类似于 void 但可用于泛型。
示例:
public class LogCommand : IRequest<Unit> { }建议: 优先使用 IRequest(无泛型参数)而非 IRequest<Unit>
V
Value Object
值对象
DDD 中的概念,表示没有唯一标识的对象,通过属性值判断相等性。
示例: Money, Address, DateRange
Validation
验证
检查输入数据是否符合规则的过程。在 MediatR 中通常通过 FluentValidation + 验证行为实现。
示例:
public class CreateOrderValidator : AbstractValidator<CreateOrderCommand>
{
public CreateOrderValidator()
{
RuleFor(x => x.Quantity).GreaterThan(0);
}
}常用缩写
| 缩写 | 全称 | 中文 |
|---|---|---|
| AOP | Aspect-Oriented Programming | 面向切面编程 |
| API | Application Programming Interface | 应用程序接口 |
| CQRS | Command Query Responsibility Segregation | 命令查询职责分离 |
| DDD | Domain-Driven Design | 领域驱动设计 |
| DI | Dependency Injection | 依赖注入 |
| DTO | Data Transfer Object | 数据传输对象 |
| HTTP | HyperText Transfer Protocol | 超文本传输协议 |
| ORM | Object-Relational Mapping | 对象关系映射 |
| REST | Representational State Transfer | 表述性状态转移 |
| SOLID | Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, Dependency Inversion | SOLID 原则 |
| SQL | Structured Query Language | 结构化查询语言 |
| SSE | Server-Sent Events | 服务器推送事件 |
| UI | User Interface | 用户界面 |
🎓 总结
掌握这些术语对于深入理解 MediatR 和相关架构模式至关重要。建议:
- ✅ 多次阅读,加深理解
- ✅ 在实际项目中应用
- ✅ 与团队统一术语使用
- ✅ 持续学习新技术术语
💡 提示: 遇到不熟悉的术语时,随时查阅本术语表!