當前位置: 妍妍網 > 碼農

一個優秀 Maven 計畫,各 Model 間最佳繼承設計方案

2024-05-14碼農

大家好,我是鵬磊。

最近心血來潮準備賭上自己這些年學習的知識做一個 耗盡心血的後台管理計畫 - Xiaole ,隨即自信的開啟IDEA準備大展身手,結果架構設計這塊怎麽構建都不是很滿意,參考了多個優秀的開源計畫之後,用自己淺薄的知識總結了一套Model設計方案。

博主自己設計,僅供參考。

所以說一個優秀的Spring Boot模組設計需要具備那些基本要素

1、 單一職責原則(SingleResponsibilityPrinciple):

  • 每個模組應該專註於執行一個清晰且明確定義的功能,遵循單一職責原則,以降低模組的復雜性。

  • 2、 高內聚性(HighCohesion):

  • 模組內的元件和類應該緊密相關,共同實作模組的目標。高內聚性有助於提高程式碼的可理解性和可維護性。

  • 3、 低耦合性(LowCoupling):

  • 模組之間的依賴應該盡可能減少,以便修改一個模組時不會對其他模組造成影響。低耦合性有助於實作獨立的模組。

  • 4、 可重用性(Reusability):

  • 模組應該設計成可重用的元件,以便在計畫的不同部份或未來的計畫中能夠復用。這透過提取通用功能到獨立的模組(如 common 模組)來實作。

  • 5、 清晰的界限和介面(ClearBoundariesandInterfaces):

  • 模組之間的界限和介面應該明確,確保模組之間的互動清晰可見。這有助於團隊成員理解各個模組的職責。

  • 6、 適度的模組化(ModerateModularity):

  • 將功能相近的元件放在同一模組中,但避免過度細化,以免引入不必要的復雜性。適度的模組化有助於提高計畫的可維護性。

  • 如果你近期準備面試跳槽,建議在ddkk.com線上刷題,涵蓋 一萬+ 道 Java 面試題,幾乎覆蓋了所有主流技術面試題,還有市面上最全的技術五百套,精品系列教程,免費提供。

  • 7、 分層架構(LayeredArchitecture):

  • 透過采用分層架構,如控制層、服務層、數據存取層等,有助於模組的劃分和管理。這有助於程式碼的組織和理解。

  • 8、 依賴倒置原則(DependencyInversionPrinciple):

  • 模組之間的依賴關系應該依賴於抽象而不是具體的實作。這有助於降低模組之間的耦合性。

  • 9、 測試容易性(Testability):

  • 模組應該設計成易於測試的單元,以便進行單元測試、整合測試和端到端測試。

  • 10、 適應未來擴充套件(AdaptabilityforFutureExtension):

  • 模組設計應該考慮未來的擴充套件性,以便在需求變化時能夠輕松地添加新功能或模組。

  • 開啟IDEA 開始建立計畫

    博主目前腦子裏邊有一個初步的架構。整體計畫使用的是Maven管理的計畫。

    大概架構長這樣:

    計畫目錄結構總覽(目前還不完整)

    ├─.idea
    ├─le-admin
    │ └─src
    │ ├─main
    │ │ ├─java
    │ │ │ └─com
    │ │ │ └─le
    │ │ │ └─admin
    │ │ └─resources
    │ │ └─META-INF
    │ └─test
    │ └─java
    │ └─com
    │ └─le
    │ └─test
    ├─le-business
    │ └─src
    │ └─main
    │ └─java
    │ └─com
    │ └─le
    │ └─business
    ├─le-common
    │ └─src
    │ └─main
    │ └─java
    │ └─com
    │ └─le
    │ └─common
    ├─le-core
    │ └─src
    │ └─main
    │ └─java
    │ └─com
    │ └─le
    │ └─core
    ├─le-gen-code
    │ └─src
    │ └─main
    │ ├─java
    │ │ └─com
    │ │ └─le
    │ │ └─code
    │ │ ├─config
    │ │ ├─controller
    │ │ ├─domain
    │ │ ├─mapper
    │ │ ├─service
    │ │ └─util
    │ └─resources
    │ ├─mapper
    │ └─vm
    └─le-tripartite
    └─src
    └─main
    └─java
    └─com
    └─le
    └─tripartite

    core` 模組:

  • 套用概述: core 模組是整個計畫的核心,專註於提供通用的配置和基礎服務。

  • 主要功能: 可能包含 Spring Boot 的核心配置、通用的攔截器、全域例外處理等。

  • 角色定位: 不包含具體的業務邏輯,主要為其他模組提供基礎設施。

  • pom檔 :↓

  • <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>com.xiaole</groupId>
    <artifactId>XiaoLe</artifactId>
    <version>1.0.0</version>
    </parent>
    <groupId>com.le</groupId>
    <artifactId>le-core</artifactId>
    <name>le-core</name>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
    <!-- MyBatis -->
    <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    </dependency>
    <!-- Mysql驅動包 -->
    <dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    </dependency>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-business</artifactId>
    </dependency>
    </dependencies>
    </project>







    common 模組:

  • 套用概述: common 模組用於存放通用的工具類和公共配置,為整個計畫提供共享的基礎。

  • 主要功能: 包含通用的工具方法、常量、公共配置等。

  • 角色定位: 不包含具體的業務邏輯,主要為其他模組提供通用功能。

  • pom檔 :↓

  • <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>com.xiaole</groupId>
    <artifactId>XiaoLe</artifactId>
    <version>1.0.0</version>
    </parent>
    <groupId>com.le</groupId>
    <artifactId>le-common</artifactId>
    <description>
    common
    </description>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    </dependency>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
    </dependency>
    <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    </dependency>
    </dependencies>
    </project>






    genCode 模組:

  • 套用概述: genCode 模組可能是一個工具模組,用於生成程式碼或加速開發過程。

  • 主要功能: 可能包含程式碼生成器、樣版引擎等,用於生成基礎程式碼結構。

  • 角色定位: 可能是一個開發輔助工具,用於提高程式碼生成的效率。

  • pom檔 :↓

  • <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>com.xiaole</groupId>
    <artifactId>XiaoLe</artifactId>
    <version>1.0.0</version>
    </parent>
    <groupId>com.le</groupId>
    <artifactId>le-gen-code</artifactId>
    <name>le-gen-code</name>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-common</artifactId>
    </dependency>
    <dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    </dependency>
    </dependencies>
    </project>




    business 模組:

  • 套用概述: business 模組是計畫的業務核心,包含實際的業務邏輯和資料庫存取。

  • 主要功能: 包含與業務相關的服務、領域邏輯、資料庫存取(如 MyBatis、Redis)、業務配置等。

  • 角色定位: 為整個計畫提供具體的業務功能,可能包括訂單處理、使用者管理等。

  • pom檔 :↓

  • <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>com.xiaole</groupId>
    <artifactId>XiaoLe</artifactId>
    <version>1.0.0</version>
    </parent>
    <groupId>com.le</groupId>
    <artifactId>le-business</artifactId>
    <name>le-business</name>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-common</artifactId>
    </dependency>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-tripartite</artifactId>
    </dependency>
    </dependencies>
    </project>





    tripartite 模組:

    套用概述: tripartite 模組可能是與第三方服務整合的模組,處理外部服務的呼叫和數據互動。

    如果你近期準備面試跳槽,建議在ddkk.com線上刷題,涵蓋 一萬+ 道 Java 面試題,幾乎覆蓋了所有主流技術面試題,還有市面上最全的技術五百套,精品系列教程,免費提供。

    主要功能: 包含與第三方服務通訊的程式碼、整合配置等。

    角色定位: 為整個計畫提供與外部系統的連線,可能包括支付閘道器、第三方 API 等。

    pom檔 :↓

    <projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>com.xiaole</groupId>
    <artifactId>XiaoLe</artifactId>
    <version>1.0.0</version>
    </parent>
    <groupId>com.le</groupId>
    <artifactId>le-tripartite</artifactId>
    <name>le-tripartite</name>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-common</artifactId>
    </dependency>
    </dependencies>
    </project>




    admin 模組:

  • 套用概述: admin 模組可能是計畫的管理界面,提供對系統的監控和管理功能。

  • 主要功能: 包含管理界面的業務邏輯、前端程式碼、可能的後台服務等。

  • 角色定位: 為管理員提供系統監控、使用者管理等功能。

  • pom檔 :↓

  • <?xml version="1.0" encoding="UTF-8"?>
    <projectxmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <parent>
    <groupId>com.xiaole</groupId>
    <artifactId>XiaoLe</artifactId>
    <version>1.0.0</version>
    </parent>
    <groupId>com.le</groupId>
    <artifactId>le-admin</artifactId>
    <packaging>jar</packaging>
    <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-gen-code</artifactId>
    </dependency>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-core</artifactId>
    </dependency>
    </dependencies>
    </project>





    父pom

    <?xml version="1.0" encoding="UTF-8"?>
    <projectxmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

    <modelVersion>4.0.0</modelVersion>
    <groupId>com.xiaole</groupId>
    <artifactId>XiaoLe</artifactId>
    <version>1.0.0</version>
    <packaging>pom</packaging>
    <name>xiaole</name>
    <description>小樂</description>
    <modules>
    <module>le-admin</module>
    <module>le-common</module>
    <module>le-core</module>
    <module>le-business</module>
    <module>le-gen-code</module>
    <module>le-tripartite</module>
    </modules>
    <properties>
    <spring-boot.version>2.5.8</spring-boot.version>
    <xiaole.version>1.0.0</xiaole.version>
    <velocity.version>2.3</velocity.version>
    <mybatis.version>2.2.0</mybatis.version>
    </properties>
    <dependencyManagement>
    <dependencies>
    <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-dependencies</artifactId>
    <version>${spring-boot.version}</version>
    <type>pom</type>
    <scope>import</scope>
    </dependency>
    <dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>${velocity.version}</version>
    </dependency>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-core</artifactId>
    <version>${xiaole.version}</version>
    </dependency>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-admin</artifactId>
    <version>${xiaole.version}</version>
    </dependency>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-common</artifactId>
    <version>${xiaole.version}</version>
    </dependency>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-business</artifactId>
    <version>${xiaole.version}</version>
    </dependency>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-gen-code</artifactId>
    <version>${xiaole.version}</version>
    </dependency>
    <dependency>
    <groupId>com.le</groupId>
    <artifactId>le-tripartite</artifactId>
    <version>${xiaole.version}</version>
    </dependency>
    <dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>${mybatis.version}</version>
    </dependency>
    </dependencies>
    </dependencyManagement>
    </project>














    為什麽采用import引入SpringBoot

    import 語句可以用於將其他 Maven 計畫中的 POM 檔匯入到當前計畫中。這樣,可以實作模組化的計畫管理。

    使用 import 語句匯入其他計畫的依賴時,可以在匯入時指定版本,使得計畫能夠更加靈活地選擇使用依賴的版本。

    可以將相關的模組組織到不同的 Maven 計畫中,透過 import 在一個父計畫中統一管理。這有助於更好地組織計畫的結構。

    🔥 磊哥私藏精品 熱門推薦 🔥