介绍
这期内容当中小编将会给大家带来有关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 发布(ListDomainEvents接口定义了出版方法,同时提供一个批量的出版方法
引用>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的作用是什么