一、业务场景

  工作多年,在真实的项目开发中经常会遇到将一个项目拆分成多个工程的情况,比如将一个真实的项目拆分成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

最新文章

  1. .net工具类
  2. Java POI 解析word文档
  3. 基于 Arduino 的 RFID 识别实验
  4. AngularJS 事件
  5. 修改nignx报错Nginx [emerg]: bind() to 0.0.0.0:80 failed (98: Address already in use)
  6. 静态局部变量(面向过程的static关键字)
  7. [转]android自动弹出软键盘(输入键盘)
  8. DataGridView 添加ComboBox
  9. cobbler常见问题
  10. [css]《css揭秘》学习(四)-一个元素实现内圆角边框
  11. 我的第一个spring boot程序(spring boot 学习笔记之二)
  12. 简单搭建SpringMVC框架详解
  13. Ubuntu18.04下安装配置MongoDB4.0.6
  14. C#编程 - 交通灯模拟
  15. Navicat 用ssh通道连接时总是报错 (报错信息:SSH:expected key exchange group packet form serve
  16. Robot Framework 自动化测试--部署篇
  17. Spring-data-redis redis
  18. pycharm破解补丁的使用
  19. python-day71--django多表操作
  20. js如何将时间戳转换为标准时间

热门文章

  1. KMP算法学习以及小结(好马不吃回头草系列)
  2. jenkins插件Role-based添加账号后显示红色"No type prefix"
  3. 145_Power BI Report Server自定义Form登录
  4. 个人冲刺(二)——体温上报app(二阶段)
  5. 「JOISC 2019 Day4」蛋糕拼接 3
  6. nginx 代理请求导出功能bug解决方法
  7. jeecgboot-vue3笔记(三)弹窗的使用
  8. .NET C#基础(1):相等性与同一性判定 - 似乎有点小缺陷的设计
  9. mysql复制表的两种方式
  10. 这不会又是一个Go的BUG吧?