项目开发中Maven的单向依赖-2022新项目
一、业务场景
工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成controller层,service层,
dao层,common公共服务层等等。这样拆分比较有利于分清各自所属层需要做的事情,也非常便于管理个层次之间的代码,职责比较清晰。各
个层次之间也会相互依赖,比如controller层需要依赖common层,则直接引入;service层需要引入common层也直接引入;dao层也是同理。
这种处理方式也没什么问题,整个项目依然能够顺利的跑起来,可是有没有什么更加好的方式来处理这些依赖关系呢?
二、需求分析
新项目中是按照分层架构来设计、搭建的,使用cola4.0的设计理念进行分层,主要分为start-启动层,只有一个启动类;adapter-适配层,
类似于controller层;app层,类似于service层;domain层表示领域层,提供领域服务,使用DDD的设计理念;Infrastructure基础设施服务层,提供
数据库操作服务。项目在原有的这些基础之上,新加了一层common,抽取一些公共的服务类,如返回数据的枚举值,统一异常处理,自定义异常等
等。这样算下来层次就比较多。总共有6层,除了start层之外,其他层都需要依赖common层在项目内部提供的服务。如果按照以前的处理方式,
每一层都单独引入common层,pom文件里面需要加的内容也比较多。那如何解决这个问题呢,一种可行的方案就是使用maven的依赖传递。

三、解决方案
假如项目中有依赖关系A-->B-->C-->D,A依赖B,B依赖C,依此类推,则A就可以间接的依赖项目D,这就是Maven中的依赖传递。根据这一特性
对上面的项目进行依赖层次的改进为:start-->adapter-->app-->infrastructrue-->domain-->common。从之前的每个工程中都需要引入common层,改为
现在只需要domain层去依赖common层,并且其他项目也能够正常使用。这种单项依赖让工程之间的关系变得更加的清晰,说得直白通俗一点就是上层
只依赖下层。这种处理方式也大大地简化了pom文件中的内容,只需要在某个工程里面引入其需要依赖的下层项目的坐标即可。经过测试,这种处理方式
完全可行,现在项目中也已经真正的使用起来,在今后的项目开发中,自己也一定会继续采用这种方式来处理项目之间的依赖关系。如果各位小伙伴有更好
的建议,欢迎留言。
参考文章:
https://blog.csdn.net/significantfrank/article/details/110934799
https://www.cnblogs.com/cy0628/p/15034450.html
项目开发中Maven的单向依赖-2022新项目的更多相关文章
- 无法访问mybatis.dto.StudengInVO-使用maven编译报错-2022新项目
一.问题由来 最近一次拉代码后,合并代码然后进行编译时出现一个问题,使用maven在进行编译的时候报一个错,无法访问mybatis.dto.StudengInVO. 突然出现这个错误让自己感觉很奇怪, ...
- Java中list集合自定义排序-2022新项目
一.业务场景 为了加快首页数据查询的效率,因此将首页查询的数据大多数都放在了缓存中,包括各种list集合数据.对这些 从缓存中获取的数据做了一个兜底处理,如果从缓存中没有获取到数据,则直接从数据库中去 ...
- 《Maven在Java项目开发中的应用》论文笔记(十七)
标题:Maven在Java项目开发中的应用 一.基本信息 时间:2019 来源:山西农业大学 关键词:Maven:Java Web:仓库:开发人员:极限编程; 二.研究内容 1.Maven 基本原理概 ...
- 项目开发中的一些注意事项以及技巧总结 基于Repository模式设计项目架构—你可以参考的项目架构设计 Asp.Net Core中使用RSA加密 EF Core中的多对多映射如何实现? asp.net core下的如何给网站做安全设置 获取服务端https证书 Js异常捕获
项目开发中的一些注意事项以及技巧总结 1.jquery采用ajax向后端请求时,MVC框架并不能返回View的数据,也就是一般我们使用View().PartialView()等,只能返回json以 ...
- Java项目开发中实现分页的三种方式一篇包会
前言 Java项目开发中经常要用到分页功能,现在普遍使用SpringBoot进行快速开发,而数据层主要整合SpringDataJPA和MyBatis两种框架,这两种框架都提供了相应的分页工具,使用 ...
- 团队项目开发中,常见的版本控制有svn,git
团队项目开发中,常见的版本控制有svn,git
- Angular 项目开发中父子组件传参
在项目开发中经常会遇到 组件之间传参的问题.今天总结下在使用angular的项目中父子组件传参的问题: 1.父组件向子组件传参: 然后在父组件中 然后在父组件的html中 然后就可以在子组件中使用了 ...
- 炼金术(1): 识别项目开发中的ProtoType、Demo、MVP
软件开发是很分裂的,只有不断使用原则和规律,才能带来质量. 只要不是玩具性质的项目,项目应该可以大概划分为0-1,1-10,10-100,100-1000四个种重要阶段.其中,0-1是原型验证性的:1 ...
- 项目开发中的git简单使用
原文地址: https://www.zhuyilong.fun/tech/the-blog-git.html 示例远程仓库地址: https://github.com/zhu-longge/gitWo ...
随机推荐
- django-rest-framework 基础四 过滤、排序、分页、异常处理
django-rest-framework 基础四 过滤.排序.分页.异常处理 目录 django-rest-framework 基础四 过滤.排序.分页.异常处理 1. 过滤 1.1 内置过滤类 1 ...
- C程序设计(谭浩强)第五版课后题答案 第一章
大家好,这篇文章分享了C程序设计(谭浩强)第五版课后题答案,所有程序已经测试能够正常运行,如果小伙伴发现有错误的的地方,欢迎留言告诉我,我会及时改正!感谢大家的观看!!! 1.什么是程序?什么是程序设 ...
- Java实现飞机大战游戏
飞机大战详细文档 文末有源代码,以及本游戏使用的所有素材,将plane2文件复制在src文件下可以直接运行. 实现效果: 结构设计 角色设计 飞行对象类 FlyObject 战机类 我的飞机 MyPl ...
- ZJOI2020
[ZJOI2015] 地震后的幻想乡 给定一个无向图 \(G\) ,\(n\) 个点 \(m\) 条边每条边权为 \([0,1]\) 的随机实数,求这张图的最小生成树的最大边权期望. \(1\le n ...
- Abp Vnext源码解析系列文章01---EventBus
一.简介 BP vNext 封装了两种事件总线结构,第一种是 ABP vNext 自己实现的本地事件总线,这种事件总线无法跨项目发布和订阅.第二种则是分布式事件总线,ABP vNext 自己封装了一个 ...
- springcloud-- Alibaba-nacos--支持的几种服务消费方式
通过<Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现>一文的学习,我们已经学会如何使用Nacos来实现服务的注册与发现,同时也介绍如何通过LoadBal ...
- iNeuOS工业互联网操作系统,在线报表(Excel)开发工具
目 录 1. 概述... 2 2. 视频介绍... 2 3. 应用过程... 2 1. 概述 iNeuOS工业互联网操作系统在线报表(Excel)工具的开 ...
- Linux系列之安装JDK
卸载open jdk #查看jdk [root@localhost tools]# rpm -qa | grep jdk java-1.8.0-openjdk-headless-1.8.0.65-3. ...
- rpm 系 linux 系统中 repo 文件中的 $release 到底等于多少?
rpm 系 linux 系统中 repo 文件中的 $release 到底等于多少? 结论 对于 8 来说,通过以下命令 #/usr/libexec/platform-python -c 'impor ...
- Vue最新防抖方案
函数防抖(debounce):当持续触发事件时,一定时间段内没有再触发事件,事件处理函数才会执行一次,如果设定的时间到来之前,又一次触发了事件,就重新开始延时.举个栗子,持续触发scroll事件时,并 ...