SpringBoot Maven項(xiàng)目中Model間的最佳繼承設(shè)計(jì)詳解
賭上職業(yè)生涯的后臺管理框架 - XiaoLe
最近心血來潮準(zhǔn)備賭上自己這些年學(xué)習(xí)的知識做一個(gè)耗盡心血的后臺管理項(xiàng)目 - Xiaole,隨即自信的打開IDEA準(zhǔn)備大展身手,結(jié)果架構(gòu)設(shè)計(jì)這塊怎么構(gòu)建都不是很滿意,參考了多個(gè)優(yōu)秀的開源項(xiàng)目之后,用自己淺薄的知識總結(jié)了一套Model設(shè)計(jì)方案。
博主自己設(shè)計(jì),僅供參考。
所以說一個(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í)不會對其他模塊造成影響。低耦合性有助于實(shí)現(xiàn)獨(dú)立的模塊。
可重用性 (Reusability):
模塊應(yīng)該設(shè)計(jì)成可重用的組件,以便在項(xiàng)目的不同部分或未來的項(xiàng)目中能夠復(fù)用。這通過提取通用功能到獨(dú)立的模塊(如common
模塊)來實(shí)現(xiàn)。
清晰的界限和接口 (Clear Boundaries and Interfaces):
模塊之間的界限和接口應(yīng)該明確,確保模塊之間的交互清晰可見。這有助于團(tuán)隊(duì)成員理解各個(gè)模塊的職責(zé)。
適度的模塊化 (Moderate Modularity):
將功能相近的組件放在同一模塊中,但避免過度細(xì)化,以免引入不必要的復(fù)雜性。適度的模塊化有助于提高項(xiàng)目的可維護(hù)性。
分層架構(gòu) (Layered Architecture):
通過采用分層架構(gòu),如控制層、服務(wù)層、數(shù)據(jù)訪問層等,有助于模塊的劃分和管理。這有助于代碼的組織和理解。
依賴倒置原則 (Dependency Inversion Principle):
模塊之間的依賴關(guān)系應(yīng)該依賴于抽象而不是具體的實(shí)現(xiàn)。這有助于降低模塊之間的耦合性。
測試容易性 (Testability):
模塊應(yīng)該設(shè)計(jì)成易于測試的單元,以便進(jìn)行單元測試、集成測試和端到端測試。
適應(yīng)未來擴(kuò)展 (Adaptability for Future Extension):
模塊設(shè)計(jì)應(yīng)該考慮未來的擴(kuò)展性,以便在需求變化時(shí)能夠輕松地添加新功能或模塊。
打開IDEA 開始創(chuàng)建項(xiàng)目
博主目前腦子里邊有一個(gè)初步的架構(gòu)。整體項(xiàng)目使用的是Maven管理的項(xiàng)目。
大概架構(gòu)長這樣:
項(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ū)動包 --> <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è)工具模塊,用于生成代碼或加速開發(fā)過程。 - 主要功能: 可能包含代碼生成器、模板引擎等,用于生成基礎(chǔ)代碼結(jié)構(gòu)。
- 角色定位: 可能是一個(gè)開發(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ù)庫訪問。 - 主要功能: 包含與業(yè)務(wù)相關(guān)的服務(wù)、領(lǐng)域邏輯、數(shù)據(jù)庫訪問(如 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)目的管理界面,提供對系統(tǒng)的監(jiān)控和管理功能。 - 主要功能: 包含管理界面的業(yè)務(wù)邏輯、前端代碼、可能的后臺服務(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>小樂</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 項(xiàng)目中的 POM 文件導(dǎo)入到當(dāng)前項(xiàng)目中。這樣,可以實(shí)現(xiàn)模塊化的項(xiàng)目管理。
使用 import
語句導(dǎo)入其他項(xiàng)目的依賴時(shí),可以在導(dǎo)入時(shí)指定版本,使得項(xiàng)目能夠更加靈活地選擇使用依賴的版本。
可以將相關(guān)的模塊組織到不同的 Maven 項(xiàng)目中,通過 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ì)的資料請關(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ì)過程(連接數(shù)據(jù)庫進(jìn)行測試)
- maven多模塊項(xiàng)目依賴管理與依賴?yán)^承詳解
- springboot實(shí)現(xiàn)maven多模塊和打包部署
- Maven分模塊開發(fā)與依賴管理和聚合和繼承及屬性深入詳細(xì)介紹
- springboot結(jié)合maven實(shí)現(xiàn)多模塊打包
相關(guān)文章
生產(chǎn)者消費(fèi)者模型ThreadLocal原理及實(shí)例詳解
這篇文章主要介紹了生產(chǎn)者消費(fèi)者模型ThreadLocal原理及實(shí)例詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09springboot+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í)體類、登錄接口、測試接口、過濾器、啟動類以及前端的登錄頁面實(shí)現(xiàn),感興趣的可以了解一下2024-10-10java?WebSocket?服務(wù)端實(shí)現(xiàn)代碼
WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。它實(shí)現(xiàn)了瀏覽器與服務(wù)器全雙工(full-duplex)通信——允許服務(wù)器主動發(fā)送信息給客戶端,這篇文章主要介紹了java?WebSocket?服務(wù)端代碼,代碼簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-02-02Java中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)知識點(diǎn)匯總
這篇文章主要介紹了常用的Java數(shù)據(jù)結(jié)構(gòu)知識點(diǎn)匯總,數(shù)據(jù)結(jié)構(gòu)分線性數(shù)據(jù)結(jié)構(gòu)和非線性數(shù)據(jù)結(jié)構(gòu),下面對此作詳細(xì)介紹,需要的小伙伴可以參考一下,希望對你的學(xué)習(xí)或工作有所幫助2022-03-03