當前位置: 妍妍網 > 碼農

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

2024-05-12碼農

來源:juejin.cn/post/7319027307578540047

👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 每月贈書

新計畫: 仿小紅書 (微服務架構)正在更新中... , 全棧前後端分離部落格計畫 2.0 版本完結啦, 演示連結 http://116.62.199.48/ 。全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了261小節,累計41w+字,講解圖:1806張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,

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

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

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

1.單一職責原則 (Single Responsibility Principle):

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

2.高內聚性 (High Cohesion):

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

3.低耦合性 (Low Coupling):

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

4.可重用性 (Reusability):

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

5.清晰的界限和介面 (Clear Boundaries and Interfaces):

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

6.適度的模組化 (Moderate Modularity):

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

7.分層架構 (Layered Architecture):

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

8.依賴倒置原則 (Dependency Inversion Principle):

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

9.測試容易性 (Testability):

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

10.適應未來擴充套件 (Adaptability for Future Extension):

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

開啟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檔:

  • <project xmlns="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檔:

  • <project xmlns="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檔:

  • <project xmlns="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檔:

  • <project xmlns="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 模組可能是與第三方服務整合的模組,處理外部服務的呼叫和數據互動。

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

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

  • pom檔:

  • <project xmlns="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"?>
    <project xmlns="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"?>
    <project xmlns="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 在一個父計畫中統一管理。這有助於更好地組織計畫的結構。

    源碼參考

    https://gitee.com/paper_cup_cake/xiao-le

    👉 歡迎 ,你將獲得: 專屬的計畫實戰 / Java 學習路線 / 一對一提問 / 學習打卡 / 每月贈書

    新計畫: 仿小紅書 (微服務架構)正在更新中... , 全棧前後端分離部落格計畫 2.0 版本完結啦, 演示連結 http://116.62.199.48/ 。全程手摸手,後端 + 前端全棧開發,從 0 到 1 講解每個功能點開發步驟,1v1 答疑,直到計畫上線。 目前已更新了261小節,累計41w+字,講解圖:1806張,還在持續爆肝中.. 後續還會上新更多計畫,目標是將Java領域典型的計畫都整一波,如秒殺系統, 線上商城, IM即時通訊,Spring Cloud Alibaba 等等,


    1. 

    2. 

    3. 

    4. 

    最近面試BAT,整理一份面試資料Java面試BATJ通關手冊,覆蓋了Java核心技術、JVM、Java並行、SSM、微服務、資料庫、數據結構等等。

    獲取方式:點「在看」,關註公眾號並回復 Java 領取,更多內容陸續奉上。

    PS:因公眾號平台更改了推播規則,如果不想錯過內容,記得讀完點一下在看,加個星標,這樣每次新文章推播才會第一時間出現在你的訂閱列表裏。

    「在看」支持小哈呀,謝謝啦