聊聊cheddar的DomainEvent

本文主要研究一下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來實現。

doc

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章