SpringBoot Maven項目中Model間的最佳繼承設計詳解
賭上職業(yè)生涯的后臺管理框架 - XiaoLe
最近心血來潮準備賭上自己這些年學習的知識做一個耗盡心血的后臺管理項目 - Xiaole,隨即自信的打開IDEA準備大展身手,結果架構設計這塊怎么構建都不是很滿意,參考了多個優(yōu)秀的開源項目之后,用自己淺薄的知識總結了一套Model設計方案。
博主自己設計,僅供參考。
所以說一個優(yōu)秀的Spring Boot模塊設計需要具備那些基本要素
單一職責原則 (Single Responsibility Principle):
每個模塊應該專注于執(zhí)行一個清晰且明確定義的功能,遵循單一職責原則,以降低模塊的復雜性。
高內聚性 (High Cohesion):
模塊內的組件和類應該緊密相關,共同實現(xiàn)模塊的目標。高內聚性有助于提高代碼的可理解性和可維護性。
低耦合性 (Low Coupling):
模塊之間的依賴應該盡可能減少,以便修改一個模塊時不會對其他模塊造成影響。低耦合性有助于實現(xiàn)獨立的模塊。
可重用性 (Reusability):
模塊應該設計成可重用的組件,以便在項目的不同部分或未來的項目中能夠復用。這通過提取通用功能到獨立的模塊(如common
模塊)來實現(xiàn)。
清晰的界限和接口 (Clear Boundaries and Interfaces):
模塊之間的界限和接口應該明確,確保模塊之間的交互清晰可見。這有助于團隊成員理解各個模塊的職責。
適度的模塊化 (Moderate Modularity):
將功能相近的組件放在同一模塊中,但避免過度細化,以免引入不必要的復雜性。適度的模塊化有助于提高項目的可維護性。
分層架構 (Layered Architecture):
通過采用分層架構,如控制層、服務層、數(shù)據(jù)訪問層等,有助于模塊的劃分和管理。這有助于代碼的組織和理解。
依賴倒置原則 (Dependency Inversion Principle):
模塊之間的依賴關系應該依賴于抽象而不是具體的實現(xiàn)。這有助于降低模塊之間的耦合性。
測試容易性 (Testability):
模塊應該設計成易于測試的單元,以便進行單元測試、集成測試和端到端測試。
適應未來擴展 (Adaptability for Future Extension):
模塊設計應該考慮未來的擴展性,以便在需求變化時能夠輕松地添加新功能或模塊。
打開IDEA 開始創(chuàng)建項目
博主目前腦子里邊有一個初步的架構。整體項目使用的是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 的核心配置、通用的攔截器、全局異常處理等。
- 角色定位: 不包含具體的業(yè)務邏輯,主要為其他模塊提供基礎設施。
- 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
模塊用于存放通用的工具類和公共配置,為整個項目提供共享的基礎。 - 主要功能: 包含通用的工具方法、常量、公共配置等。
- 角色定位: 不包含具體的業(yè)務邏輯,主要為其他模塊提供通用功能。
- 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
模塊可能是一個工具模塊,用于生成代碼或加速開發(fā)過程。 - 主要功能: 可能包含代碼生成器、模板引擎等,用于生成基礎代碼結構。
- 角色定位: 可能是一個開發(fā)輔助工具,用于提高代碼生成的效率。
- 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
模塊是項目的業(yè)務核心,包含實際的業(yè)務邏輯和數(shù)據(jù)庫訪問。 - 主要功能: 包含與業(yè)務相關的服務、領域邏輯、數(shù)據(jù)庫訪問(如 MyBatis、Redis)、業(yè)務配置等。
- 角色定位: 為整個項目提供具體的業(yè)務功能,可能包括訂單處理、用戶管理等。
- 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
模塊可能是與第三方服務集成的模塊,處理外部服務的調用和數(shù)據(jù)交互。 - 主要功能: 包含與第三方服務通信的代碼、集成配置等。
- 角色定位: 為整個項目提供與外部系統(tǒng)的連接,可能包括支付網關、第三方 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
模塊可能是項目的管理界面,提供對系統(tǒng)的監(jiān)控和管理功能。 - 主要功能: 包含管理界面的業(yè)務邏輯、前端代碼、可能的后臺服務等。
- 角色定位: 為管理員提供系統(tǒng)監(jiān)控、用戶管理等功能。
- 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 文件導入到當前項目中。這樣,可以實現(xiàn)模塊化的項目管理。
使用 import
語句導入其他項目的依賴時,可以在導入時指定版本,使得項目能夠更加靈活地選擇使用依賴的版本。
可以將相關的模塊組織到不同的 Maven 項目中,通過 import
在一個父項目中統(tǒng)一管理。這有助于更好地組織項目的結構。
源碼參考
XiaoLe: 一款 輕便、靈活、穩(wěn)定、健壯 的建站框架。 賭上自己的java生涯, 用盡自己的畢生所學。 (gitee.com)
以上就是SpringBoot Maven項目中Model間的最佳繼承設計詳解的詳細內容,更多關于SpringBoot Maven模塊繼承設計的資料請關注腳本之家其它相關文章!
相關文章
springboot+vue前后端分離項目中使用jwt實現(xiàn)登錄認證
本文介紹了如何在SpringBoot+Vue前后端分離的項目中使用JWT實現(xiàn)登錄認證,內容包括后端的響應工具類、JWT工具類、登錄用戶實體類、登錄接口、測試接口、過濾器、啟動類以及前端的登錄頁面實現(xiàn),感興趣的可以了解一下2024-10-10