演示:React + Spring + ArchUnit的開源專案
使用 ArchUnit 強化Java架構:展示如何使用 Spring 執行前端 (React) 和後端 (Java) 的 Java開源專案,建立具有前端和後端的專案,以便在本地或透過瀏覽器輕鬆執行。
前端技術:
- JavaScript
- React 17.0.2
- MUI 5
- Jest
- GitHub actions
後端Java:
- Java 11
- SpringBoot 2.6.3
- Spring
- Hibernate
- Swagger - OpenAPI 1.6.7
- MapStruct
- GitHub actions
- Gradle — 7.4
- ArchUnit — 0.23.1
- JUnit 5–5.8.2
這是一個單體分層架構:
- 1st → 專案層
- 2nd → 單元測試,我們對更好架構的守護者
- 3rd → Gradle 構建檔案
- 4th → 對archUnit的依賴
UT(單元測試)
只需一個 UT,您就可以設定您的監護人來保證系統架構。
在我們的設定中,首先我們需要通知 UT 不考慮測試包。如果您的情況有任何例外,請也新增到設定中。
然後是一個愚蠢的測試,說任何 web 包都可以被 web 包內的任何類訪問。
最後,更重要的是關於層,我們控制層,非常出色:
package com.costa.luiz.zero2hero; import com.tngtech.archunit.core.domain.JavaClasses; import com.tngtech.archunit.core.importer.ClassFileImporter; import com.tngtech.archunit.core.importer.ImportOption; import com.tngtech.archunit.lang.ArchRule; import com.tngtech.archunit.library.Architectures; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Test; import static com.tngtech.archunit.lang.syntax.ArchRuleDefinition.classes; import static com.tngtech.archunit.library.Architectures.layeredArchitecture; class ArchitectureGuardianTest { private static JavaClasses importedClasses; @BeforeAll static void setUp() { ImportOption ignoreTests = location -> { return !location.contains("/test/"); // ignore any URI to sources that contains '/test/' }; importedClasses = new ClassFileImporter().withImportOption(ignoreTests).importPackages("com.costa.luiz.zero2hero"); } @Test void webShouldOnlyBeAccessedByWeb() { ArchRule serviceRule = classes() .that().resideInAPackage("..web..") .should().onlyBeAccessed() .byAnyPackage("..web.."); serviceRule.check(importedClasses); } @Test void layeredArchitectureGuardian() { Architectures.LayeredArchitecture layeredArchitecture = layeredArchitecture() .layer("Controller").definedBy("..web..") .layer("Business").definedBy("..business..") .layer("Persistence").definedBy("..persistence..") .whereLayer("Controller").mayNotBeAccessedByAnyLayer() .whereLayer("Business").mayOnlyBeAccessedByLayers("Controller", "Business") .whereLayer("Persistence").mayOnlyBeAccessedByLayers("Business"); layeredArchitecture.check(importedClasses); } } |
相關文章
- IBM knative101演示實驗開源專案IBM
- 開源兩個spring api專案SpringAPI
- React.js前端 + Spring Boot後端員工管理系統開源專案ReactJS前端Spring Boot後端
- 優秀的 Spring Boot 語言開源專案Spring Boot
- 使用Spring Boot開發的10個免費開源專案Spring Boot
- 【3月更新】React Native 優秀開源專案大全React Native
- 看spring cloud開源專案Pig的雲踩坑記SpringCloud
- Spring Boot 2.0 版的開源專案雲收藏來了!Spring Boot
- 使用Spring Boot的10多個免費開源專案Spring Boot
- Spring Boot 2.5.6、JDK 17 和 Maven 的完整開源專案Spring BootJDKMaven
- 使用Spring Boot實現微服務架構的開源專案Spring Boot微服務架構
- 一個檔案的開源專案,開啟你的開源之旅
- 開源專案推薦:提高研發效率的5個開源專案
- Github 上 Star 最多的個人 Spring Boot 開源學習專案GithubSpring Boot
- 推薦一個開源免費的 Spring Boot 實戰專案Spring Boot
- Next.js+Spring boot開源電子商務專案JSSpring Boot
- IOS開源專案iOS
- 開源好專案
- Spring 社群的唯一一個國產開源專案 - Spring Cloud Alibaba 畢業了SpringCloud
- typescript + react 專案開發體驗之 reactTypeScriptReact
- Spring MVC——專案的開發流程SpringMVC
- Vue+Spring Boot 前後端分離的商城專案開源啦!VueSpring Boot後端
- Spring Cloud Alibaba 開源背後的故事 | 開源中國專訪SpringCloud
- 如何高效管理 React Native 專案中的圖片資源React Native
- 開源專案之kisso
- AI開源專案 - SeldonAI
- AI開源專案 - ONNXAI
- AI開源專案 - KubeflowAI
- AI開源專案 - MLflowAI
- AI開源專案 - ZeppelinAI
- AI開源專案 - JupyterAI
- AI開源專案 - AdaNetAI
- AI開源專案 - AutoKerasAIKeras
- AI開源專案 - TPOTAI
- AI開源專案 - RayAI
- AI開源專案 - NNIAI
- AI 開源專案 - DaskAI
- AI開源專案 - HorovodAI