SpringBoot Maven項(xiàng)目中Model間的最佳繼承設(shè)計(jì)詳解
賭上職業(yè)生涯的后臺(tái)管理框架 - XiaoLe
最近心血來(lái)潮準(zhǔn)備賭上自己這些年學(xué)習(xí)的知識(shí)做一個(gè)耗盡心血的后臺(tái)管理項(xiàng)目 - Xiaole,隨即自信的打開(kāi)IDEA準(zhǔn)備大展身手,結(jié)果架構(gòu)設(shè)計(jì)這塊怎么構(gòu)建都不是很滿意,參考了多個(gè)優(yōu)秀的開(kāi)源項(xiàng)目之后,用自己淺薄的知識(shí)總結(jié)了一套Model設(shè)計(jì)方案。
博主自己設(shè)計(jì),僅供參考。
所以說(shuō)一個(gè)優(yōu)秀的Spring Boot模塊設(shè)計(jì)需要具備那些基本要素
單一職責(zé)原則 (Single Responsibility Principle):
每個(gè)模塊應(yīng)該專注于執(zhí)行一個(gè)清晰且明確定義的功能,遵循單一職責(zé)原則,以降低模塊的復(fù)雜性。
高內(nèi)聚性 (High Cohesion):
模塊內(nèi)的組件和類應(yīng)該緊密相關(guān),共同實(shí)現(xiàn)模塊的目標(biāo)。高內(nèi)聚性有助于提高代碼的可理解性和可維護(hù)性。
低耦合性 (Low Coupling):
模塊之間的依賴應(yīng)該盡可能減少,以便修改一個(gè)模塊時(shí)不會(huì)對(duì)其他模塊造成影響。低耦合性有助于實(shí)現(xiàn)獨(dú)立的模塊。
可重用性 (Reusability):
模塊應(yīng)該設(shè)計(jì)成可重用的組件,以便在項(xiàng)目的不同部分或未來(lái)的項(xiàng)目中能夠復(fù)用。這通過(guò)提取通用功能到獨(dú)立的模塊(如common模塊)來(lái)實(shí)現(xiàn)。
清晰的界限和接口 (Clear Boundaries and Interfaces):
模塊之間的界限和接口應(yīng)該明確,確保模塊之間的交互清晰可見(jiàn)。這有助于團(tuán)隊(duì)成員理解各個(gè)模塊的職責(zé)。
適度的模塊化 (Moderate Modularity):
將功能相近的組件放在同一模塊中,但避免過(guò)度細(xì)化,以免引入不必要的復(fù)雜性。適度的模塊化有助于提高項(xiàng)目的可維護(hù)性。
分層架構(gòu) (Layered Architecture):
通過(guò)采用分層架構(gòu),如控制層、服務(wù)層、數(shù)據(jù)訪問(wèn)層等,有助于模塊的劃分和管理。這有助于代碼的組織和理解。
依賴倒置原則 (Dependency Inversion Principle):
模塊之間的依賴關(guān)系應(yīng)該依賴于抽象而不是具體的實(shí)現(xiàn)。這有助于降低模塊之間的耦合性。
測(cè)試容易性 (Testability):
模塊應(yīng)該設(shè)計(jì)成易于測(cè)試的單元,以便進(jìn)行單元測(cè)試、集成測(cè)試和端到端測(cè)試。
適應(yīng)未來(lái)擴(kuò)展 (Adaptability for Future Extension):
模塊設(shè)計(jì)應(yīng)該考慮未來(lái)的擴(kuò)展性,以便在需求變化時(shí)能夠輕松地添加新功能或模塊。
打開(kāi)IDEA 開(kāi)始創(chuàng)建項(xiàng)目
博主目前腦子里邊有一個(gè)初步的架構(gòu)。整體項(xiàng)目使用的是Maven管理的項(xiàng)目。
大概架構(gòu)長(zhǎng)這樣:

項(xiàng)目目錄結(jié)構(gòu)總覽(目前還不完整)
├─.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` 模塊:
- 應(yīng)用概述:
core模塊是整個(gè)項(xiàng)目的核心,專注于提供通用的配置和基礎(chǔ)服務(wù)。 - 主要功能: 可能包含 Spring Boot 的核心配置、通用的攔截器、全局異常處理等。
- 角色定位: 不包含具體的業(yè)務(wù)邏輯,主要為其他模塊提供基礎(chǔ)設(shè)施。
- 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驅(qū)動(dòng)包 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>com.le</groupId>
<artifactId>le-business</artifactId>
</dependency>
</dependencies>
</project>
common 模塊:
- 應(yīng)用概述:
common模塊用于存放通用的工具類和公共配置,為整個(gè)項(xiàng)目提供共享的基礎(chǔ)。 - 主要功能: 包含通用的工具方法、常量、公共配置等。
- 角色定位: 不包含具體的業(yè)務(wù)邏輯,主要為其他模塊提供通用功能。
- 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 模塊:
- 應(yīng)用概述:
genCode模塊可能是一個(gè)工具模塊,用于生成代碼或加速開(kāi)發(fā)過(guò)程。 - 主要功能: 可能包含代碼生成器、模板引擎等,用于生成基礎(chǔ)代碼結(jié)構(gòu)。
- 角色定位: 可能是一個(gè)開(kāi)發(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 模塊:
- 應(yīng)用概述:
business模塊是項(xiàng)目的業(yè)務(wù)核心,包含實(shí)際的業(yè)務(wù)邏輯和數(shù)據(jù)庫(kù)訪問(wèn)。 - 主要功能: 包含與業(yè)務(wù)相關(guān)的服務(wù)、領(lǐng)域邏輯、數(shù)據(jù)庫(kù)訪問(wèn)(如 MyBatis、Redis)、業(yè)務(wù)配置等。
- 角色定位: 為整個(gè)項(xiàng)目提供具體的業(yè)務(wù)功能,可能包括訂單處理、用戶管理等。
- 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 模塊:
- 應(yīng)用概述:
tripartite模塊可能是與第三方服務(wù)集成的模塊,處理外部服務(wù)的調(diào)用和數(shù)據(jù)交互。 - 主要功能: 包含與第三方服務(wù)通信的代碼、集成配置等。
- 角色定位: 為整個(gè)項(xiàng)目提供與外部系統(tǒng)的連接,可能包括支付網(wǎng)關(guān)、第三方 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 模塊:
- 應(yīng)用概述:
admin模塊可能是項(xiàng)目的管理界面,提供對(duì)系統(tǒng)的監(jiān)控和管理功能。 - 主要功能: 包含管理界面的業(yè)務(wù)邏輯、前端代碼、可能的后臺(tái)服務(wù)等。
- 角色定位: 為管理員提供系統(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>小樂(lè)</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 語(yǔ)句可以用于將其他 Maven 項(xiàng)目中的 POM 文件導(dǎo)入到當(dāng)前項(xiàng)目中。這樣,可以實(shí)現(xiàn)模塊化的項(xiàng)目管理。
使用 import 語(yǔ)句導(dǎo)入其他項(xiàng)目的依賴時(shí),可以在導(dǎo)入時(shí)指定版本,使得項(xiàng)目能夠更加靈活地選擇使用依賴的版本。
可以將相關(guān)的模塊組織到不同的 Maven 項(xiàng)目中,通過(guò) import 在一個(gè)父項(xiàng)目中統(tǒng)一管理。這有助于更好地組織項(xiàng)目的結(jié)構(gòu)。
源碼參考
XiaoLe: 一款 輕便、靈活、穩(wěn)定、健壯 的建站框架。 賭上自己的java生涯, 用盡自己的畢生所學(xué)。 (gitee.com)
以上就是SpringBoot Maven項(xiàng)目中Model間的最佳繼承設(shè)計(jì)詳解的詳細(xì)內(nèi)容,更多關(guān)于SpringBoot Maven模塊繼承設(shè)計(jì)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- SpringBoot創(chuàng)建maven多模塊項(xiàng)目實(shí)戰(zhàn)代碼
- SpringBoot+Maven 多模塊項(xiàng)目的構(gòu)建、運(yùn)行、打包實(shí)戰(zhàn)
- Maven的聚合(多模塊)和Parent繼承
- springboot+idea+maven 多模塊項(xiàng)目搭建的詳細(xì)過(guò)程(連接數(shù)據(jù)庫(kù)進(jìn)行測(cè)試)
- maven多模塊項(xiàng)目依賴管理與依賴?yán)^承詳解
- springboot實(shí)現(xiàn)maven多模塊和打包部署
- Maven分模塊開(kāi)發(fā)與依賴管理和聚合和繼承及屬性深入詳細(xì)介紹
- springboot結(jié)合maven實(shí)現(xiàn)多模塊打包
相關(guān)文章
生產(chǎn)者消費(fèi)者模型ThreadLocal原理及實(shí)例詳解
這篇文章主要介紹了生產(chǎn)者消費(fèi)者模型ThreadLocal原理及實(shí)例詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
springboot+vue前后端分離項(xiàng)目中使用jwt實(shí)現(xiàn)登錄認(rèn)證
本文介紹了如何在SpringBoot+Vue前后端分離的項(xiàng)目中使用JWT實(shí)現(xiàn)登錄認(rèn)證,內(nèi)容包括后端的響應(yīng)工具類、JWT工具類、登錄用戶實(shí)體類、登錄接口、測(cè)試接口、過(guò)濾器、啟動(dòng)類以及前端的登錄頁(yè)面實(shí)現(xiàn),感興趣的可以了解一下2024-10-10
java?WebSocket?服務(wù)端實(shí)現(xiàn)代碼
WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工(full-duplex)通信——允許服務(wù)器主動(dòng)發(fā)送信息給客戶端,這篇文章主要介紹了java?WebSocket?服務(wù)端代碼,代碼簡(jiǎn)單易懂,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02
Java中Aspose組件進(jìn)行多文檔間的轉(zhuǎn)換方法總結(jié)
在本篇文章里我們給大家分享了關(guān)于Java中Aspose組件進(jìn)行多文檔間的轉(zhuǎn)換方法內(nèi)容,需要的朋友們學(xué)習(xí)下吧。2019-02-02
常用的Java數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)匯總
這篇文章主要介紹了常用的Java數(shù)據(jù)結(jié)構(gòu)知識(shí)點(diǎn)匯總,數(shù)據(jù)結(jié)構(gòu)分線性數(shù)據(jù)結(jié)構(gòu)和非線性數(shù)據(jù)結(jié)構(gòu),下面對(duì)此作詳細(xì)介紹,需要的小伙伴可以參考一下,希望對(duì)你的學(xué)習(xí)或工作有所幫助2022-03-03

