序
本文主要研究一下cheddar的DomainEvent
DomainEvent
Cheddar/cheddar/cheddar-domain/src/main/java/com/clicktravel/cheddar/domain/event/DomainEvent.java
public interface DomainEvent extends Event {
}
DomainEvent接口繼承了Event接口
AbstractDomainEvent
Cheddar/cheddar/cheddar-domain/src/main/java/com/clicktravel/cheddar/domain/event/AbstractDomainEvent.java
public abstract class AbstractDomainEvent extends AbstractEvent implements DomainEvent {
public abstract String context();
@Override
public final String type() {
return context() + "." + getClass().getSimpleName();
}
}
AbstractDomainEvent繼承了AbstractEvent,聲明實現了DomainEvent接口,它聲明瞭一個抽象的context方法
DomainEventHandler
Cheddar/cheddar/cheddar-domain/src/main/java/com/clicktravel/cheddar/domain/event/DomainEventHandler.java
public interface DomainEventHandler extends EventHandler<DomainEvent> {
}
public interface HighPriorityDomainEventHandler extends DomainEventHandler {
}
public interface LowPriorityDomainEventHandler extends DomainEventHandler {
}
DomainEventHandler接口繼承了EventHandler接口,其泛型爲DomainEvent;HighPriorityDomainEventHandler及LowPriorityDomainEventHandler接口繼承了DomainEventHandler接口
DomainEventPublisher
Cheddar/cheddar/cheddar-domain/src/main/java/com/clicktravel/cheddar/domain/event/DomainEventPublisher.java
public class DomainEventPublisher extends EventPublisher<DomainEvent> {
private static DomainEventPublisher instance;
public static void init(final MessagePublisher<TypedMessage> messagePublisher) {
instance = new DomainEventPublisher(messagePublisher);
}
private DomainEventPublisher(final MessagePublisher<TypedMessage> messagePublisher) {
super(messagePublisher);
}
public static DomainEventPublisher instance() {
if (instance == null) {
throw new IllegalStateException("DomainEventPublisher not initialized");
}
return instance;
}
}
DomainEventPublisher繼承了EventPublisher,其構造器接收MessagePublisher;它提供了init方法用於創建DomainEventPublisher,instance方法用於獲取instance
小結
cheddar定義了DomainEvent接口及AbstractDomainEvent抽象類;DomainEventHandler接口繼承了EventHandler接口,其泛型爲DomainEvent;DomainEventPublisher繼承了EventPublisher,其構造器接收MessagePublisher,其publishEvent方法最後通過MessagePublisher的publish來實現。