43 lines
1.2 KiB
Markdown
43 lines
1.2 KiB
Markdown
---
|
||
applyTo: "src/Fengling.Member.Domain/DomainEvents/*.cs"
|
||
---
|
||
|
||
# 领域事件开发指南
|
||
|
||
## 开发原则
|
||
|
||
### 必须
|
||
|
||
- **事件定义**:
|
||
- 必须使用 `record` 类型。
|
||
- 必须标记接口 `IDomainEvent`,无需额外实现。
|
||
- 无额外信息传递需求时,将聚合作为构造函数参数。
|
||
- **命名规范**:
|
||
- 使用过去式动词描述已发生的事情。
|
||
- 格式:`{Entity}{Action}DomainEvent`。
|
||
- 例如:`UserCreatedDomainEvent`、`OrderPaidDomainEvent`、`ProductUpdatedDomainEvent`。
|
||
|
||
### 必须不要
|
||
|
||
- **复杂逻辑**:领域事件本身不应包含业务逻辑,仅作为数据载体。
|
||
|
||
## 文件命名规则
|
||
|
||
- 类文件应放置在 `src/Fengling.Member.Domain/DomainEvents` 目录下。
|
||
- 为每个聚合添加一个领域事件文件。
|
||
- 文件名格式为 `{Aggregate}DomainEvents.cs`。
|
||
- 一个领域事件文件中可以包含多个领域事件。
|
||
|
||
## 代码示例
|
||
|
||
**文件**: `src/Fengling.Member.Domain/DomainEvents/UserDomainEvents.cs`
|
||
|
||
```csharp
|
||
using Fengling.Member.Domain.Aggregates.UserAggregate;
|
||
|
||
namespace Fengling.Member.Domain.DomainEvents;
|
||
|
||
public record UserCreatedDomainEvent(User User) : IDomainEvent;
|
||
|
||
public record UserEmailChangedDomainEvent(User User) : IDomainEvent;
|
||
``` |