一个优秀 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.xdnf.cn/news/1420472.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

基于SpringBoot+Vue的法律咨询系统

课题背景 二十一世纪互联网的出现&#xff0c;改变了几千年以来人们的生活&#xff0c;不仅仅是生活物资的丰富&#xff0c;还有精神层次的丰富。在互联网诞生之前&#xff0c;地域位置往往是人们思想上不可跨域的鸿沟&#xff0c;信息的传播速度极慢&#xff0c;信息处理的速…

动态规划算法:⼦数组、⼦串系列(数组中连续的⼀段)

例题一 解法&#xff08;动态规划&#xff09;&#xff1a; 算法思路&#xff1a; 1. 状态表⽰&#xff1a; 对于线性 dp &#xff0c;我们可以⽤「经验 题⽬要求」来定义状态表⽰&#xff1a; i. 以某个位置为结尾&#xff0c;巴拉巴拉&#xff1b; ii. 以某个位置…

Qt---信号和槽

一、信号和槽机制 所谓信号槽&#xff0c;实际就是观察者模式。当某个事件发生之后&#xff0c;比如&#xff0c;按钮检测到自己被点击了一下&#xff0c;它就会发出一个信号&#xff08;signal&#xff09;。这种发出是没有目的的&#xff0c;类似广播。如果有对象对这个信号…

十一、Redis持久化-RDB、AOF

Redis提供了两种持久化数据的方式。一种是RDB快照&#xff0c;另一种是AOF日志。RDB快照是一次全量备份&#xff0c;AOF日志是连续的增量备份。RDB快照是以二进制的方式存放Redis中的数据&#xff0c;在存储上比较紧凑&#xff1b;AOF日志记录的是对内存数据修改的指令文本记录…

【Unity 鼠标输入检测】

Unity 鼠标输入检测 Unity提供了多种方法来检测和处理鼠标输入&#xff0c;允许开发者在游戏中实现对鼠标移动、点击和滚轮滚动的响应。以下是一些基本的鼠标输入检测方法&#xff1a; 1. Input.mousePosition 这个属性返回当前鼠标指针的屏幕坐标。坐标是以像素为单位的&…

【算法】动态规划之背包DP与树形DP

前言&#xff1a; 本系列是学习了董晓老师所讲的知识点做的笔记 董晓算法的个人空间-董晓算法个人主页-哔哩哔哩视频 (bilibili.com) 动态规划系列 【算法】动态规划之线性DP问题-CSDN博客 【算法】动态规划之背包DP问题&#xff08;2024.5.11&#xff09;-CSDN博客 背包…

数据分享—鄱阳湖矢量边界数据

鄱阳湖位于中国江西省北部&#xff0c;是中国最大的淡水湖泊之一&#xff0c;也是长江流域第一大湖。鄱阳湖水域广阔&#xff0c;湖区面积约为3600平方公里。鄱阳湖拥有丰富的水生生物资源&#xff0c;湖中有多种淡水鱼类和水生植物&#xff0c;是重要的渔业资源基地之一。湖泊…

WHAT - CSS Animationtion 动画系列(二)

目录 一、循环波浪二、关键帧呼应三、关键帧顺接四、利用 transform-origin 做拉伸五、大元素可拆分多个小元素联动六、预留视觉缓冲七、随机感&#xff1a;动画周期设置八、抛物线&#xff1a;两个内外div实现x和y向量运动 今天我们主要学习动画实现要素。 一、循环波浪 利用…

LLM推理入门指南③:剖析模型性能

在本系列文章《LLM推理入门指南①&#xff1a;文本生成的初始化与解码阶段》中&#xff0c;作者对Transformer解码器的文本生成算法进行了高层次概述&#xff0c;着重介绍了两个阶段&#xff1a;提示的处理阶段和逐个生成补全词元的多步生成阶段。在上一篇文章《LLM推理入门指南…

ppt保存文件奇怪问题

我发现ppt中的形状保存成jpg,png和pdf时&#xff0c;格式不一样 比如 当右键单击时&#xff0c;然后选择另存为图片 png格式 jpg格式 pdf格式 感觉还是很奇怪&#xff0c;就pdf的格式比较靠谱一点

愿岁月温柔以待你,爱你不止三千遍│活动进行中:以AI之名,时光陪伴

愿岁月温柔以待你&#xff0c;爱你不止三千遍│活动进行中&#xff1a;以AI之名&#xff0c;时光陪伴 在这个充满温馨的母亲节&#xff0c;我们很高兴地宣布&#xff0c;星鸾云A平台推出了一项特别活动&#xff1a;“以AI之名&#xff0c;时光陪伴”。我们相信&#xff0c;科技…

该从哪些方面提升系统的吞吐量?

更多大厂面试内容可见 -> http://11come.cn 该从哪些方面提升系统的吞吐量&#xff1f; 我们平时自己做的项目一般没有用户量&#xff0c;都是练手项目&#xff0c;所以并不会在吞吐量上做出很多的优化&#xff0c;但是这样的话&#xff0c;又会导致项目和其他人相比并没有…

机器学习(1)

目录 1-1.西瓜书 1-2.课程定位 1-3.机器学习 1-4.典型的机器学习过程 1-5.机器学习理论 1-6.基本术语 1-7.归纳偏好 1-8.NFL定理 1-1.西瓜书 建议使用方式 1.初学机器学习的第一本书:通读、速读;细节不懂处略过&#xff0c;了解机器学习的疆域和基本思想&#xff0c;…

电路板维修【三】

自恢复保险丝&#xff1a; 自恢复保险丝属于慢断类型保险丝&#xff0c;自恢复保险丝的材料因为通电后发热&#xff0c;当电流过大发热到一定程度的时候&#xff0c;材料就不导电了&#xff0c;这个和普通的保险丝是一个道理&#xff0c;只不过普通的保险丝是一次型熔断而已。…

pair对组创建

创建方式1: pair<type,type> p(value1,value2); pair<string, int> p("Tom", 20); cout << "name:" << p.first << "age:" << p.second << endl; 创建方式2: pair<type,type> pmake_pair(v…

妙笔生花,创作无限——WonderPen妙笔 for Mac

写作&#xff0c;是灵感的流淌&#xff0c;是心灵的独白。WonderPen妙笔 for Mac&#xff0c;为您的灵感插上翅膀&#xff0c;让您的创作更加流畅自如。它拥有简洁直观的界面设计&#xff0c;让您的思绪在纯净的写作环境中自由飞翔。多种写作模式&#xff0c;满足您不同的创作需…

OFDM802.11a的FPGA实现(十三)加窗(含verilog和matlab代码)

原文链接&#xff08;相关文章合集&#xff09;&#xff1a;OFDM 802.11a的xilinx FPGA实现 1.前言 添加循环前缀后,对数据还要进行加窗(Windowing)操作。加窗操作可以使OFDM 符号在带宽之外的功率谱密度下降得更快。 2.加窗 对OFDM符号“加窗”意味着令符号周期边缘的幅度…

基于python的旅游爬虫可视化与实现

摘要 本项目为基于python的旅游爬虫可视化的设计与实现&#xff0c;项目以Web系统形式展示&#xff0c;利用Xpath爬虫爬取去哪儿网针对旅游业的需求&#xff0c;对国内热门旅游景点数据可视化系统&#xff0c;将爬取好的数据保存为CSV文件&#xff0c;再通过ORM框架导入MySQL数…

软件库V1.5版本iApp源码V3

软件库V1.5版本iApp源码V3 配置教程在【mian.iyu】的【载入事件】 更新内容&#xff1a; 1、分类对接蓝奏&#xff08;免费&#xff0c;付费&#xff0c;会员&#xff0c;广告&#xff09;&#xff0c;支持蓝奏文件描述设置为简介&#xff08;改动&#xff1a;首页.iyu&#…

【信道编码】2 卷积码、状态转移图、状态转移表、网格表示和码字路径

【信道编码】2 卷积码、状态转移图、状态转移表、网格表示和码字路径 写在最前面例题先行&#xff0c;原理随后示例&#xff1a;输入为01011100状态转移表状态转移图 卷积码的原理原理与结构工作流程误差纠正 &#xff08;2,1,2&#xff09;卷积编码器工作原理结构和示例状态转…