看一个聚合根:

  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;
}
}
 

最新文章

  1. node.js 学习
  2. [转]架构蓝图--软件架构 &quot;4+1&quot; 视图模型
  3. IntegerCache类
  4. 爬虫2 url管理器 url_manager.py
  5. PHP--Warning: Invalid argument supplied for foreach() in ...
  6. Flink - Juggling with Bits and Bytes
  7. Qt中sleep()的实现(耳目一新的两种方法)
  8. elasticsearch 集群配置
  9. HDU 5433 Xiao Ming climbing
  10. 转: OpenResty最佳实践
  11. mybatis()
  12. Python学习笔记012_网络_异常
  13. R语言学习 第七篇:列表
  14. Java:bufferedReader.readLine()读取文件换行问题
  15. HTML Table to Json
  16. C#之Action的实际应用例子
  17. $.ajax()参数详解及标准写法(转)
  18. Java基础——JSP(二)
  19. Kafka安装及使用
  20. [转]uboot中SPI Flash Booting配置

热门文章

  1. electron之环境安装、启动程序
  2. vue不同序号的元素添加不同的样式
  3. shell cat 用法
  4. spark-submit 参数总结
  5. 各个处理器架构ISA编程指南
  6. [dart学习]第七篇:类(构造函数)
  7. 分组卷积+squeezenet+mobilenet+shufflenet的参数及运算量计算
  8. How To Use Rocketbots As A Dialogflow CRM
  9. FMZ发明者量化平台回测机制说明
  10. upload上传通关游戏