【SpringBoot】 一个优秀Maven项目的各Model间最佳继承设计

赌上职业生涯的后台管理框架 - XiaoLe

最近心血来潮准备赌上自己这些年学习的知识做一个耗尽心血的后台管理项目 - Xiaole,随即自信的打开IDEA准备大展身手,结果架构设计这块怎么构建都不是很满意,参考了多个优秀的开源项目之后,用自己浅薄的知识总结了一套Model设计方案。

博主自己设计,仅供参考。

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

  1. 单一职责原则 (Single Responsibility Principle):

    • 每个模块应该专注于执行一个清晰且明确定义的功能,遵循单一职责原则,以降低模块的复杂性。
  2. 高内聚性 (High Cohesion):

    • 模块内的组件和类应该紧密相关,共同实现模块的目标。高内聚性有助于提高代码的可理解性和可维护性。
  3. 低耦合性 (Low Coupling):

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

    • 模块应该设计成可重用的组件,以便在项目的不同部分或未来的项目中能够复用。这通过提取通用功能到独立的模块(如common模块)来实现。
  5. 清晰的界限和接口 (Clear Boundaries and Interfaces):

    • 模块之间的界限和接口应该明确,确保模块之间的交互清晰可见。这有助于团队成员理解各个模块的职责。
  6. 适度的模块化 (Moderate Modularity):

    • 将功能相近的组件放在同一模块中,但避免过度细化,以免引入不必要的复杂性。适度的模块化有助于提高项目的可维护性。
  7. 分层架构 (Layered Architecture):

    • 通过采用分层架构,如控制层、服务层、数据访问层等,有助于模块的划分和管理。这有助于代码的组织和理解。
  8. 依赖倒置原则 (Dependency Inversion Principle):

    • 模块之间的依赖关系应该依赖于抽象而不是具体的实现。这有助于降低模块之间的耦合性。
  9. 测试容易性 (Testability):

    • 模块应该设计成易于测试的单元,以便进行单元测试、集成测试和端到端测试。
  10. 适应未来扩展 (Adaptability for Future Extension):

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

打开IDEA 开始创建项目

博主目前脑子里边有一个初步的架构。整体项目使用的是Maven管理的项目。

大概架构长这样:


项目目录结构总览(目前还不完整)

css 复制代码
├─.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文件:↓
xml 复制代码
<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>
            <scope>test</scope>
        </dependency>
​
    </dependencies>
</project>

common 模块:

  • 应用概述: common 模块用于存放通用的工具类和公共配置,为整个项目提供共享的基础。
  • 主要功能: 包含通用的工具方法、常量、公共配置等。
  • 角色定位: 不包含具体的业务逻辑,主要为其他模块提供通用功能。
  • pom文件:↓
xml 复制代码
<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>
​
    </dependencies>
</project>

genCode 模块:

  • 应用概述: genCode 模块可能是一个工具模块,用于生成代码或加速开发过程。
  • 主要功能: 可能包含代码生成器、模板引擎等,用于生成基础代码结构。
  • 角色定位: 可能是一个开发辅助工具,用于提高代码生成的效率。
  • pom文件:↓
xml 复制代码
<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>code</name>
​
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
​
    <dependencies>
        <dependency>
            <groupId>com.le</groupId>
            <artifactId>le-core</artifactId>
        </dependency>
​
        <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文件:↓
xml 复制代码
<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>code</name>
​
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
​
<dependencies>
    <dependency>
        <groupId>com.le</groupId>
        <artifactId>le-core</artifactId>
    </dependency>
​
    <dependency>
        <groupId>com.le</groupId>
        <artifactId>le-common</artifactId>
    </dependency>
​
</dependencies>
</project>

tripartite 模块:

  • 应用概述: tripartite 模块可能是与第三方服务集成的模块,处理外部服务的调用和数据交互。
  • 主要功能: 包含与第三方服务通信的代码、集成配置等。
  • 角色定位: 为整个项目提供与外部系统的连接,可能包括支付网关、第三方 API 等。
  • pom文件:↓
xml 复制代码
<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-core</name>
​
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
​
    <dependencies>
​
        <dependency>
            <groupId>com.le</groupId>
            <artifactId>le-business</artifactId>
        </dependency>
​
    </dependencies>
</project>

admin 模块:

  • 应用概述: admin 模块可能是项目的管理界面,提供对系统的监控和管理功能。
  • 主要功能: 包含管理界面的业务逻辑、前端代码、可能的后台服务等。
  • 角色定位: 为管理员提供系统监控、用户管理等功能。
  • pom文件:↓
xml 复制代码
<?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-tripartite</artifactId>
        </dependency>
​
        <dependency>
            <groupId>com.le</groupId>
            <artifactId>le-business</artifactId>
        </dependency>
​
    </dependencies>
</project>

父pom

xml 复制代码
<?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>
    </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>
​
        </dependencies>
    </dependencyManagement>
​
</project>

为什么采用import引入SpringBoot

  • import 语句可以用于将其他 Maven 项目中的 POM 文件导入到当前项目中。这样,可以实现模块化的项目管理。
  • 使用 import 语句导入其他项目的依赖时,可以在导入时指定版本,使得项目能够更加灵活地选择使用依赖的版本。
  • 可以将相关的模块组织到不同的 Maven 项目中,通过 import 在一个父项目中统一管理。这有助于更好地组织项目的结构。

源码参考

XiaoLe: 一款 轻便、灵活、稳定、健壮 的建站框架。 赌上自己的java生涯, 用尽自己的毕生所学。 (gitee.com)

总结

一定要多思考,如果人永远待在舒适圈的话,人永远不会成长。共勉

觉得作者写的不错的,值得你们借鉴的话,就请点一个免费的赞吧!这个对我来说真的很重要。૮(˶ᵔ ᵕ ᵔ˶)ა

相关推荐
程序员-珍19 分钟前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发
liuxin3344556636 分钟前
教育技术革新:SpringBoot在线教育系统开发
数据库·spring boot·后端
bug菌2 小时前
Java GUI编程进阶:多线程与并发处理的实战指南
java·后端·java ee
团儿.3 小时前
解锁MySQL高可用新境界:深入探索MHA架构的无限魅力与实战部署
数据库·mysql·架构·mysql之mha架构
夜月行者3 小时前
如何使用ssm实现基于SSM的宠物服务平台的设计与实现+vue
java·后端·ssm
Yvemil73 小时前
RabbitMQ 入门到精通指南
开发语言·后端·ruby
sdg_advance3 小时前
Spring Cloud之OpenFeign的具体实践
后端·spring cloud·openfeign
代码在改了4 小时前
springboot厨房达人美食分享平台(源码+文档+调试+答疑)
java·spring boot
猿java4 小时前
使用 Kafka面临的挑战
java·后端·kafka
碳苯4 小时前
【rCore OS 开源操作系统】Rust 枚举与模式匹配
开发语言·人工智能·后端·rust·操作系统·os