成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

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

這期內(nèi)容當中小編將會給大家?guī)碛嘘Pddd-by-examples中DomainEvent的作用是什么,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

創(chuàng)新互聯(lián)是一家專業(yè)從事網(wǎng)站建設、網(wǎng)絡營銷、重慶小程序開發(fā)公司、網(wǎng)站運營為一體的建站企業(yè);在網(wǎng)站建設告別千篇一律,告別似曾相識,這一次我們重新定義網(wǎng)站建設,讓您的網(wǎng)站別具一格。成都響應式網(wǎng)站建設公司,實現(xiàn)全網(wǎng)營銷!一站適應多終端,一樣的建站,不一樣的體驗!

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實現(xiàn)了DomainEvents接口,其publish方法通過spring的ApplicationEventPublisher來發(fā)布

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實現(xiàn)了DomainEvents接口,其publish先執(zhí)行delegate.publish(event),然后遞增metrics的counter計數(shù)

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實現(xiàn)了DomainEvents接口,其publish方法先通過eventsStorage.save(event)保存事件,之后有一個定時任務不斷執(zhí)行eventsStorage.toPublish()獲取events,發(fā)布事件,最后執(zhí)行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實現(xiàn)了EventsStorage接口,其save方法添加event到eventList,其toPublish方法返回當時的eventList,其published方法從eventList移除指定的events

小結

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

上述就是小編為大家分享的ddd-by-examples中DomainEvent的作用是什么了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

網(wǎng)頁題目:ddd-by-examples中DomainEvent的作用是什么
文章網(wǎng)址:http://jinyejixie.com/article12/pspjgc.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供面包屑導航、虛擬主機、服務器托管、全網(wǎng)營銷推廣、電子商務、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化
凤凰县| 荣成市| 永济市| 景宁| 扎赉特旗| 外汇| 张家港市| 苏尼特右旗| 泌阳县| 屏南县| 德阳市| 濉溪县| 承德县| 康马县| 磴口县| 昌吉市| 泌阳县| 苏尼特右旗| 永仁县| 赞皇县| 海门市| 龙州县| 富平县| 历史| 濮阳县| 达孜县| 元氏县| 邵武市| 固安县| 新巴尔虎左旗| 岑巩县| 伊宁市| 仲巴县| 沙田区| 弥渡县| 广汉市| 社旗县| 修武县| 德清县| 维西| 文昌市|