⭐⭐⭐ Spring Boot 项目实战 ⭐⭐⭐ Spring Cloud 项目实战
《Dubbo 实现原理与源码解析 —— 精品合集》 《Netty 实现原理与源码解析 —— 精品合集》
《Spring 实现原理与源码解析 —— 精品合集》 《MyBatis 实现原理与源码解析 —— 精品合集》
《Spring MVC 实现原理与源码解析 —— 精品合集》 《数据库实体设计合集》
《Spring Boot 实现原理与源码解析 —— 精品合集》 《Java 面试题 + Java 学习指南》

摘要: 原创出处 网络 「网络」欢迎转载,保留摘要,谢谢!


🙂🙂🙂关注微信公众号:【芋道源码】有福利:

  1. RocketMQ / MyCAT / Sharding-JDBC 所有源码分析文章列表
  2. RocketMQ / MyCAT / Sharding-JDBC 中文注释源码 GitHub 地址
  3. 您对于源码的疑问每条留言都将得到认真回复。甚至不知道如何读源码也可以请教噢。
  4. 新的源码解析文章实时收到通知。每周更新一篇左右。
  5. 认真的源码交流微信群。

所以说一个优秀的Spring Boot模块设计需要具备那些基本要素

1、 单一职责原则(SingleResponsibilityPrinciple):

  • 每个模块应该专注于执行一个清晰且明确定义的功能,遵循单一职责原则,以降低模块的复杂性。

2、 高内聚性(HighCohesion):

  • 模块内的组件和类应该紧密相关,共同实现模块的目标。高内聚性有助于提高代码的可理解性和可维护性。

3、 低耦合性(LowCoupling):

  • 模块之间的依赖应该尽可能减少,以便修改一个模块时不会对其他模块造成影响。低耦合性有助于实现独立的模块。

4、 可重用性(Reusability):

  • 模块应该设计成可重用的组件,以便在项目的不同部分或未来的项目中能够复用。这通过提取通用功能到独立的模块(如common模块)来实现。

5、 清晰的界限和接口(ClearBoundariesandInterfaces):

  • 模块之间的界限和接口应该明确,确保模块之间的交互清晰可见。这有助于团队成员理解各个模块的职责。

6、 适度的模块化(ModerateModularity):

  • 将功能相近的组件放在同一模块中,但避免过度细化,以免引入不必要的复杂性。适度的模块化有助于提高项目的可维护性。
  • 如果你近期准备面试跳槽,建议在ddkk.com在线刷题,涵盖 一万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题,还有市面上最全的技术五百套,精品系列教程,免费提供。

7、 分层架构(LayeredArchitecture):

  • 通过采用分层架构,如控制层、服务层、数据访问层等,有助于模块的划分和管理。这有助于代码的组织和理解。

8、 依赖倒置原则(DependencyInversionPrinciple):

  • 模块之间的依赖关系应该依赖于抽象而不是具体的实现。这有助于降低模块之间的耦合性。

9、 测试容易性(Testability):

  • 模块应该设计成易于测试的单元,以便进行单元测试、集成测试和端到端测试。

10、 适应未来扩展(AdaptabilityforFutureExtension):

  • 模块设计应该考虑未来的扩展性,以便在需求变化时能够轻松地添加新功能或模块。

打开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 模块可能是与第三方服务集成的模块,处理外部服务的调用和数据交互。

如果你近期准备面试跳槽,建议在ddkk.com在线刷题,涵盖 一万+ 道 Java 面试题,几乎覆盖了所有主流技术面试题,还有市面上最全的技术五百套,精品系列教程,免费提供。

主要功能: 包含与第三方服务通信的代码、集成配置等。

角色定位: 为整个项目提供与外部系统的连接,可能包括支付网关、第三方 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 在一个父项目中统一管理。这有助于更好地组织项目的结构。

文章目录
  1. 1. 所以说一个优秀的Spring Boot模块设计需要具备那些基本要素
  2. 2. 打开IDEA 开始创建项目
  3. 3. 为什么采用import引入SpringBoot