Kotlin和SpringBoot開發的六邊形架構應用案例

banq發表於2019-08-30

TalkAdvisor是一個使用Kotlin和SpringBoot開發的六邊形體系結構演示應用程式。

Kotlin和SpringBoot開發的六邊形架構應用案例

TalkAdvisor由4個不同的模組組成:

1. 六邊形內部talkadvisor-domain

此模組儲存應用程式的所有業務價值,您可以在其中找到其DDD聚合Recommendation.。 已配置Maven以防止向領域中匯入任何外部工件:

 <plugin>
                <artifactId>maven-enforcer-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>enforce</goal>
                        </goals>
                        <configuration>
                            <rules>
                                <bannedDependencies>
                                    <excludes>
                                        <exclude>*</exclude> <!-- forbids non domain dependencies -->
                                    </excludes>
                                    <includes>
                                        <!-- but allow kotlin dependencies-->
                                        <include>org.jetbrains.kotlin:*</include>
                                        <include>org.jetbrains:annotations</include>
                                        <!-- and commons-lang3 because we don't want to make the wheel again -->
                                        <include>org.apache.commons:commons-lang3</include>
                                        <!-- and test dependencies-->
                                        <include>*:*:*:*:test</include>
                                    </includes>
                                </bannedDependencies>
                            </rules>
                        </configuration>
                    </execution>
                </executions>
            </plugin>

如果向pom新增了任何依賴項,如果此列表中不允許,則構建將失敗。

2. 六邊形的外面talkadvisor-infra

所有介面卡都收集​​在talkadvisor-infra模組中。talkadvisor-infra是一個父pom,集中了所有介面卡的常見配置(Spring Boot BOM,...)。基礎設施分為3個模組:

(1)talkadvisor-infra-application

整個應用程式駐留在此模組中。您可以在此處找到控制器YouTube客戶端(SPI介面卡),REST資源(API介面卡)和Spring Boot應用程式

(2)talkadvisor-infra-external-stubs

儲存外部服務存根,基本上是wiremock-based基礎設施,其中儲存了我們向YouTube發出的請求的一些響應有效負載。這些存根是在整合驗收測試期間啟動的,以便完全隔離TalkAdvisor的CICD構建。它們也可用於執行應用程式,請參閱執行應用程式

(3)talkadvisor-infra-acceptance-tests

整合驗收和應用程式的端到端測試。它們在每個構建中針對具有外部存根的TalkAdvisor的本地例項啟動。端到端測試也可以針對插入真實呼叫的YouTube部署例項啟動,請參閱啟動端到端測試

使用Cucumber(領域驅動測試)在領域驅動設計和六邊形體系結構中實現功能測試

使用領域驅動設計和六邊形體系結構,通常意味著應用行為驅動開發方法。

很多人都理解它,這種技術現在很普遍。不幸的是,我們經常看到用於描述應用程式行為的功能測試被實現為測試REST端點的http客戶端。

這種(反)模式的主要缺點是測試問題的混合。通過這種型別的測試,我們有責任驗證:

  • 應用程式的業務邏輯(功能測試)
  • 外部API的合同(合同測試)
  • 提供給消費者的工作流程 - 或類似的東西(端到端測試)
  • 領域物件和介面卡之間的對映(單元測試/整合測試)
  • 應用程式的不同子元件的整合,例如控制器,領域服務,儲存庫...... (整合測試/元件測試)
  • 大部分時間都不知道它:活動文件(合同測試)

原文

 

相關文章