当前位置: 首页 > news >正文

一个优秀 Maven 项目,各 Model 间最佳继承设计方案

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管理的项目。

大概架构长这样:

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

├─.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 在一个父项目中统一管理。这有助于更好地组织项目的结构。

http://www.lryc.cn/news/346925.html

相关文章:

  • MATLAB概述
  • Redis5.0的Stream数据结构
  • 避坑指南!RK3588香橙派yolov5生成RKNN模型!
  • 算法学习笔记(Nim游戏)
  • 第13节 第二种shellcode编写实战(2)
  • 【QuikGraph】C#调用第三方库实现迪杰斯特拉(Dijkstra)算法功能
  • 查看ubuntu当前路径的剩余存储空间
  • 利用预训练模型和迁移学习打造智能狗门
  • 常用Linux命令详细总结
  • 基于SpringBoot的竹宣非遗宣传网站
  • 怎么清理服务器的C盘?
  • 动态规划----股票买卖问题(详解)
  • Unity射线检测不到MeshCollider的原因
  • ssrf初步
  • linux 安装 mangodb 并设置服务开机自启
  • Virtualbox7.0.10+Ubuntu20.04网络配置
  • 设计模式之服务定位器模式
  • 冯喜运:5.12黄金回撤继续上涨,下周原油走势分析
  • JavaEE企业级开发中常用的JDK7和JDK8的时间类
  • leetcode 2316.统计无向图中无法互相到达点对数
  • WPS二次开发系列:如何使用WPS返回的FileUri
  • python删除一个文件夹所有文件
  • overflow:hidden对解决外边距塌陷的个人理解
  • 【linux软件基础知识】- 文件的概念:Linux 中的文件
  • Context capture/Pix4Dmapper/AutoCAD/CASS/EPS软件的安装流程与使用方法;土方量计算;无人机摄影测量数据处理
  • 算法系列之堆排序实践哪家强
  • 01-win10安装Qt5
  • mybatis使用及配置相关,仅做个人记录
  • 【STM32 |新建一个工程】基于标准库(库函数)新建工程
  • C#利用ClearScript执行Javascript脚本