Dewdrop:開源事件源框架

banq發表於2022-07-21

Dewdrop 是一個自以為是的、簡單而強大的框架,用於在 Java 中實現事件溯源。Dewdrop 的想法是透過將所有複雜的事件讀取、寫入和編組深入到框架中,使您的團隊能夠專注於根據 AggregateRoot 構建業務邏輯,從而輕鬆快速地構建事件驅動系統行為、查詢邏輯和 ReadModel 組合。

目前,Dewdrop 僅支援使用EventStore作為其後備儲存。

Dewdrop 嚴格遵循一些架構原則,以便輕鬆構建事件驅動的系統。以下是 Dewdrop 的核心概念:
  • DDD - 領域驅動設計
  • CQRS - 命令查詢職責分離
  • 事件溯源——事件驅動架構


使用方式
首先,您需要確保在本地執行 EventStore。為此,您可以下載EventStore客戶端並執行它。或者,您可以執行儲存庫中包含的 docker 例項。要啟動 docker 例項,請在 dewdrop 目錄中執行以下命令:
docker-compose up -d
我們還假設大多數參與該專案的人都在像 Spring Boot 這樣的依賴注入框架中執行它。如果是這種情況,您需要建立一個包裝您的 DI 應用程式上下文的類。對於 Spring Boot,您將建立一個實現DependencyInjectionAdapter並將其公開為 bean 的類。

public class DewdropDependencyInjection implements DependencyInjectionAdapter {
        private ApplicationContext applicationContext;
        public DewdropDependencyInjection(ApplicationContext applicationContext) {
                this.applicationContext = applicationContext;
        }

        @Override
        public <T> T getBean(Class<?> clazz) {
            return (T) applicationContext.getBean(clazz);
        }
}


這讓 Dewdrop 知道它應該使用應用程式上下文來獲取它需要的 Spring 託管 bean。

下一步是建立一個DewdropConfiguration用於配置 Dewdrop 框架的類。

import java.beans.BeanProperty;

public class DewdropConfiguration {
    @Autowired
    ApplicationContext applicationContext;
    
    @Bean 
    public DewdropDependencyInjection dependencyInjection() {
        return new DewdropDependencyInjection(applicationContext);
    }
    
    @Bean
    public DewdropProperties dewdropProperties() {
        return DewdropProperties.builder()
            .packageToScan("events.dewdrop")
            .packageToExclude("events.dewdrop.fixture.customized")
            .connectionString("esdb://localhost:2113?tls=false")
            .create();
    }
    
    @Bean 
    public Dewdrop dewdrop() {
        return DewdropSettings.builder()
            .properties(dewdropProperties())
            .dependencyInjectionAdapter(dependencyInjection())
            .create()
            .start();
    }
}

就是這樣!您現在可以執行該應用程式,它將啟動 Dewdrop 框架。

相關文章