eventFlow 系列 <二> 领域事件
2024-09-05 05:36:21
看一个聚合根:
public class ExampleAggregate :
AggregateRoot<ExampleAggregate, ExampleId>,
IEmit<ExampleEvent>
{
private int? _magicNumber;
private int NameExample; public ExampleAggregate(ExampleId id) : base(id) { } // Method invoked by our command
public IExecutionResult SetMagicNumer(int magicNumber,int n)
{
if (_magicNumber.HasValue)
return ExecutionResult.Failed("Magic number already set"); Emit(new ExampleEvent(magicNumber, n)); return ExecutionResult.Success();
} // We apply the event as part of the event sourcing system. EventFlow
// provides several different methods for doing this, e.g. state objects,
// the Apply method is merely the simplest
public void Apply(ExampleEvent aggregateEvent)
{
_magicNumber = aggregateEvent.MagicNumber;
NameExample = aggregateEvent.NameExample;
}
}
实现了IEmit 接口,那么
Emit(new ExampleEvent(magicNumber, n));
这句话执行的时候,
就会触发领域事件的执行。
这个Emit 是AggregateRoot 的方法。在AggregateRoot 的Emit 方法中,调用apply 方法。
下面是ReadModel ,实现了 IAmReadModelFor<ExampleAggregate, ExampleId, ExampleEvent> 接口
public class ExampleReadModel :
IReadModel,
IAmReadModelFor<ExampleAggregate, ExampleId, ExampleEvent>
{
public int MagicNumber { get; private set; }
public int NameExample { get; private set; }
public void Apply(IReadModelContext context, IDomainEvent<ExampleAggregate, ExampleId, ExampleEvent> domainEvent)
{
MagicNumber = domainEvent.AggregateEvent.MagicNumber;
NameExample = domainEvent.AggregateEvent.NameExample;
}
}
最新文章
- node.js 学习
- [转]架构蓝图--软件架构 ";4+1"; 视图模型
- IntegerCache类
- 爬虫2 url管理器 url_manager.py
- PHP--Warning: Invalid argument supplied for foreach() in ...
- Flink - Juggling with Bits and Bytes
- Qt中sleep()的实现(耳目一新的两种方法)
- elasticsearch 集群配置
- HDU 5433 Xiao Ming climbing
- 转: OpenResty最佳实践
- mybatis()
- Python学习笔记012_网络_异常
- R语言学习 第七篇:列表
- Java:bufferedReader.readLine()读取文件换行问题
- HTML Table to Json
- C#之Action的实际应用例子
- $.ajax()参数详解及标准写法(转)
- Java基础——JSP(二)
- Kafka安装及使用
- [转]uboot中SPI Flash Booting配置