ddd-by-examples中DomainEvent的作用是什么

  介绍

这期内容当中小编将会给大家带来有关ddd-by-examples中DomainEvent的作用是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

DomainEvent

 public  interface  DomainEvent  {
  
  ,,,UUID  getEventId ();
  
  ,,,UUID  getAggregateId ();
  
  ,,,Instant  getWhen ();
  }

DomainEvent接口定义了getEventId, getAggregateId, getWhen方法

DomainEvents

 public  interface  DomainEvents  {
  
  ,,,void 发布(DomainEvent 事件);
  
  ,,,default  void 发布(List 

DomainEvents接口定义了出版方法,同时提供一个批量的出版方法

JustForwardDomainEventPublisher

 @AllArgsConstructor
  public  class  JustForwardDomainEventPublisher  implements  DomainEvents  {
  
  ,,,private  final  ApplicationEventPublisher  applicationEventPublisher;
  
  ,,@Override
  ,,,public  void 发布(DomainEvent 事件),{
  ,,,,,,,applicationEventPublisher.publishEvent(事件);
  ,,,}
  }

JustForwardDomainEventPublisher实现了DomainEvents接口,其出版方法通过春天的ApplicationEventPublisher来发布

MeteredDomainEventPublisher

 @AllArgsConstructor
  public  class  MeteredDomainEventPublisher  implements  DomainEvents  {
  
  ,,,private  static  final  String  DOMAIN_EVENTS =,“domain_events";
  ,,,private  static  final  String  TAG_NAME =,“name";
  
  ,,,private  final  DomainEvents 委托;
  ,,,private  final  MeterRegistry  metricsRegistry;
  
  ,,@Override
  ,,,public  void 发布(DomainEvent 事件),{
  ,,,,,,,delegate.publish(事件);
  ,,,,,,,metricsRegistry.counter (DOMAIN_EVENTS, TAG_NAME,, event.getClass () .getSimpleName ()) .increment ();
  ,,,}
  }

MeteredDomainEventPublisher实现了DomainEvents接口,其发布先执行delegate.publish(事件),然后递增度量的计数器计数

StoreAndForwardDomainEventPublisher

 @AllArgsConstructor
  public  class  StoreAndForwardDomainEventPublisher  implements  DomainEvents  {
  
  ,,,private  final  DomainEvents  eventsPublisher;
  ,,,private  final  EventsStorage  eventsStorage;
  
  ,,@Override
  ,,,public  void 发布(DomainEvent 事件),{
  ,,,,,,,eventsStorage.save(事件);
  ,,,}
  
  ,,,@Scheduled (=fixedRate  3000 l)
  ,,@ transactional
  ,,,public  void  publishAllPeriodically (), {
  ,,,,,,,List, domainEvents =, eventsStorage.toPublish ();
  ,,,,,,,domainEvents.forEach (eventsPublisher:发布);
  ,,,,,,,eventsStorage.published (domainEvents);
  ,,,}
  }

StoreAndForwardDomainEventPublisher实现了DomainEvents接口,其出版方法先通过eventsStorage.save(事件)保存事件,之后有一个定时任务不断执行eventsStorage.toPublish()获取事件,发布事件,最后执行eventsStorage.published (DomainEvents)

EventsStorage

 public  interface  EventsStorage  {
  
  ,,,void 保存(DomainEvent 事件);
  
  ,,,List, toPublish ();
  
  ,,,void 出版(List,事件);
  }

EventsStorage接口定义了保存,toPublish,出版方法

InMemoryEventsStorage

 public  class  InMemoryEventsStorage  implements  EventsStorage  {
  
  ,,,//变# 39;s  not  thread 安全,enough  for 测试
  ,,,private  final  java.util.List, eventList =, Collections.synchronizedList (new  ArrayList<祝辞());
  
  ,,@Override
  ,,,synchronized  public  void 保存(DomainEvent 事件),{
  ,,,,,,,eventList.add(事件);
  ,,,}
  
  ,,@Override
  ,,,synchronized  public  List, toPublish (), {
  null
  null
  null
  null
  null
  null
  null
  null

ddd-by-examples中DomainEvent的作用是什么