91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

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

發布時間:2021-06-22 16:56:40 來源:億速云 閱讀:214 作者:Leah 欄目:編程語言

這期內容當中小編將會給大家帶來有關ddd-by-examples中DomainEvent的作用是什么,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

DomainEvent

public interface DomainEvent {

    UUID getEventId();

    UUID getAggregateId();

    Instant getWhen();
}

DomainEvent接口定義了getEventId、getAggregateId、getWhen方法

DomainEvents

public interface DomainEvents {

    void publish(DomainEvent event);

    default void publish(List<DomainEvent> events) {
        events.forEach(this::publish);
    }
}

DomainEvents接口定義了publish方法,同時提供一個批量的publish方法

JustForwardDomainEventPublisher

@AllArgsConstructor
public class JustForwardDomainEventPublisher implements DomainEvents {

    private final ApplicationEventPublisher applicationEventPublisher;

    @Override
    public void publish(DomainEvent event) {
        applicationEventPublisher.publishEvent(event);
    }
}

JustForwardDomainEventPublisher實現了DomainEvents接口,其publish方法通過spring的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 delegate;
    private final MeterRegistry metricsRegistry;

    @Override
    public void publish(DomainEvent event) {
        delegate.publish(event);
        metricsRegistry.counter(DOMAIN_EVENTS, TAG_NAME, event.getClass().getSimpleName()).increment();
    }
}

MeteredDomainEventPublisher實現了DomainEvents接口,其publish先執行delegate.publish(event),然后遞增metrics的counter計數

StoreAndForwardDomainEventPublisher

@AllArgsConstructor
public class StoreAndForwardDomainEventPublisher implements DomainEvents {

    private final DomainEvents eventsPublisher;
    private final EventsStorage eventsStorage;

    @Override
    public void publish(DomainEvent event) {
        eventsStorage.save(event);
    }

    @Scheduled(fixedRate = 3000L)
    @Transactional
    public void publishAllPeriodically() {
        List<DomainEvent> domainEvents = eventsStorage.toPublish();
        domainEvents.forEach(eventsPublisher::publish);
        eventsStorage.published(domainEvents);
    }
}

StoreAndForwardDomainEventPublisher實現了DomainEvents接口,其publish方法先通過eventsStorage.save(event)保存事件,之后有一個定時任務不斷執行eventsStorage.toPublish()獲取events,發布事件,最后執行eventsStorage.published(domainEvents)

EventsStorage

public interface EventsStorage {

    void save(DomainEvent event);

    List<DomainEvent> toPublish();

    void published(List<DomainEvent> events);
}

EventsStorage接口定義了save、toPublish、published方法

InMemoryEventsStorage

public class InMemoryEventsStorage implements EventsStorage {

    //it's not thread safe, enough for testing
    private final java.util.List<DomainEvent> eventList = Collections.synchronizedList(new ArrayList<>());

    @Override
    synchronized public void save(DomainEvent event) {
        eventList.add(event);
    }

    @Override
    synchronized public List<DomainEvent> toPublish() {
        return List.ofAll(eventList);
    }

    @Override
    synchronized public void published(List<DomainEvent> events) {
        eventList.removeAll(events.asJava());
    }
}

InMemoryEventsStorage實現了EventsStorage接口,其save方法添加event到eventList,其toPublish方法返回當時的eventList,其published方法從eventList移除指定的events

小結

ddd-by-examples定義了DomainEvent、DomainEvents接口,其中JustForwardDomainEventPublisher、MeteredDomainEventPublisher、StoreAndForwardDomainEventPublisher實現了DomainEvents接口;StoreAndForwardDomainEventPublisher借助了EventsStorage,EventsStorage接口定義了save、toPublish、published方法。

上述就是小編為大家分享的ddd-by-examples中DomainEvent的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

略阳县| 临汾市| 黎城县| 平和县| 兴安县| 西乡县| 宁津县| 巴东县| 河东区| 澄江县| 漳平市| 天峻县| 建阳市| 南漳县| 错那县| 宾川县| 华坪县| 合山市| 美姑县| 眉山市| 昌都县| 西安市| 晋州市| 鹤庆县| 应城市| SHOW| 宣化县| 乡城县| 蒙阴县| 南康市| 江阴市| 会昌县| 永仁县| 滁州市| 宣武区| 民县| 贡嘎县| 卢湾区| 广宁县| 星座| 霍林郭勒市|