<del id="d4fwx"><form id="d4fwx"></form></del>
      <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

            <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
          • ddd-by-examples中DomainEvent的作用是什么

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

            創(chuàng)新互聯(lián)是一家專業(yè)從事網(wǎng)站建設(shè)、網(wǎng)絡(luò)營銷、重慶小程序開發(fā)公司、網(wǎng)站運營為一體的建站企業(yè);在網(wǎng)站建設(shè)告別千篇一律,告別似曾相識,這一次我們重新定義網(wǎng)站建設(shè),讓您的網(wǎng)站別具一格。成都響應(yīng)式網(wǎng)站建設(shè)公司,實現(xiàn)全網(wǎng)營銷!一站適應(yī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)保存事件,之后有一個定時任務(wù)不斷執(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方法返回當(dāng)時的eventList,其published方法從eventList移除指定的events

            小結(jié)

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

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

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

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

            廣告

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

            搜索引擎優(yōu)化

              <del id="d4fwx"><form id="d4fwx"></form></del>
              <del id="d4fwx"><form id="d4fwx"></form></del><del id="d4fwx"><form id="d4fwx"></form></del>

                    <code id="d4fwx"><abbr id="d4fwx"></abbr></code>
                  • ass极品水嫩小泬粉嫩Pⅰc | 国产精品久久久豆花视频 | 免费看日韩AⅤ大片在线直播 | 肏逼网| 成人在线无码视频 |