SpringBoot Maven项目中Model间的最佳继承设计详解
作者:乐乐家的乐乐
赌上职业生涯的后台管理框架 - XiaoLe
最近心血来潮准备赌上自己这些年学习的知识做一个耗尽心血的后台管理项目 - Xiaole,随即自信的打开IDEA准备大展身手,结果架构设计这块怎么构建都不是很满意,参考了多个优秀的开源项目之后,用自己浅薄的知识总结了一套Model设计方案。
博主自己设计,仅供参考。
所以说一个优秀的Spring Boot模块设计需要具备那些基本要素
单一职责原则 (Single Responsibility Principle):
每个模块应该专注于执行一个清晰且明确定义的功能,遵循单一职责原则,以降低模块的复杂性。
高内聚性 (High Cohesion):
模块内的组件和类应该紧密相关,共同实现模块的目标。高内聚性有助于提高代码的可理解性和可维护性。
低耦合性 (Low Coupling):
模块之间的依赖应该尽可能减少,以便修改一个模块时不会对其他模块造成影响。低耦合性有助于实现独立的模块。
可重用性 (Reusability):
模块应该设计成可重用的组件,以便在项目的不同部分或未来的项目中能够复用。这通过提取通用功能到独立的模块(如common
模块)来实现。
清晰的界限和接口 (Clear Boundaries and Interfaces):
模块之间的界限和接口应该明确,确保模块之间的交互清晰可见。这有助于团队成员理解各个模块的职责。
适度的模块化 (Moderate Modularity):
将功能相近的组件放在同一模块中,但避免过度细化,以免引入不必要的复杂性。适度的模块化有助于提高项目的可维护性。
分层架构 (Layered Architecture):
通过采用分层架构,如控制层、服务层、数据访问层等,有助于模块的划分和管理。这有助于代码的组织和理解。
依赖倒置原则 (Dependency Inversion Principle):
模块之间的依赖关系应该依赖于抽象而不是具体的实现。这有助于降低模块之间的耦合性。
测试容易性 (Testability):
模块应该设计成易于测试的单元,以便进行单元测试、集成测试和端到端测试。
适应未来扩展 (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
在一个父项目中统一管理。这有助于更好地组织项目的结构。
源码参考
XiaoLe: 一款 轻便、灵活、稳定、健壮 的建站框架。 赌上自己的java生涯, 用尽自己的毕生所学。 (gitee.com)
以上就是SpringBoot Maven项目中Model间的最佳继承设计详解的详细内容,更多关于SpringBoot Maven模块继承设计的资料请关注脚本之家其它相关文章!