当前位置: 首页 > 科技观察

SSM(十)项目重构——互联网项目的Maven结构

时间:2023-03-11 22:12:28 科技观察

前言好久没更新博客了,原定下周更新,逐渐改为月刊。怎么感觉像是一直在追的动漫。其实我很久以前就想写这篇博文了。之前的代码都是一个模块开发的,完全不符合maven的理念。最近,我花了一些时间重构项目的结构。前言好久没更新博客了,下周更新逐渐变成了每月更新。怎么感觉像是一直在追的动漫。其实我很久以前就想写这篇博文了。之前的代码都是一个模块开发的,完全不符合maven的理念。最近,我花了一些时间重构项目的结构。我们先来看看为什么这次重构后的目录结构要分模块。至于为什么要分模块呢?我们想象这样一个场景:在现在的互联网发展中,一个大系统会被拆分成各个子系统,以降低它们之间的耦合度。在一个子项目中,通常会有API、WEB、Service等模块。而当项目足够大时,这些通常不是一个人可以完成的任务,需要一个团队来分工。想象一下:当之前的所有项目都在一个模块中时,A改变了API,需要Deploy代码。而B也改了service的代码,但是并没有彻底完蛋。所以A在提交构建的时候会报错,而当整个项目足够大的时候,构建时间也会影响效率。但是我把模块分开后效果就不一样了。如果我修改API,我只需要自己管理,不需要构建整个项目。而且当有其他项目需要依赖我的API时,他们只需要依赖这个API,而不需要依赖整个项目。各模块的作用下面来看看我这次划分的模块。ROOT这是整个项目的根节点。先看pom.xml:com.crossoverJieSSMpom2.0.0SSM-APISSM-BOOTSSM-SERVICESSM-WEBUTF-84.1.4.RELEASE2.5.06.0.1com.crossoverJieSSM-API2.0.0我截取了比较重要的配置。因为这是父节点,所以我的packag类型使用的是pom.分别有四个子模块。关注标签。如果你使用的是IDEA开发工具,可以看到下图:红色标记处有一个向下的箭头,点击它可以在子模块中输入相同的依赖。这样子模块不需要配置具体的版本,由父模块统一维护,也为后续的版本升级带来了好处。SSM-API接下来看API模块:通常这个模块用来定义对外接口,修改接口依赖的一些DTO类。一般该模块用于依赖其他项目,与本项目进行数据交互。SSM-BOOTBOOT是一个特殊的模块。可以看到这里没有代码,只有一个rpc配置文件。通常这个模块是用来依赖我们内部项目的,而不是像上面的API模块那样依赖于其他部门或者项目。因为我们的RPC调用的时候,以dubbo为例,是需要配置依赖消费者的。但是如果是我们自己的内部调用,我们可以在这里配置需要调用我们自己的dubbo服务提供者,这样我们就只能依赖这个BOOT来调用了。哦对了,BOOT也依赖API,这样只需要依赖BOOT就可以调用自己内部的dubbo服务了。如下:SSM-APISSM-SERVICESERVICE模块更容易理解。它是处理具体业务逻辑的地方,也是前面API的实现。通常这也是一个web模块,所以我的pom类型是WAR。SSM-WEB其实WEB模块和SERVICE模块有一点重叠。一般来说,这个模块一般在一个对外提供http访问接口的项目中。这里只是为了展示项目结构,所以也写在这里。他的作用类似于服务,都是WAR类型。综上所述,本次并没有实现什么特别的功能,只是对于一些没有接触过这个项目结构开发的童鞋来说,只能起到一个引导作用。具体源码请关注我的github。项目地址:https://github.com/crossoverJie/SSM.git个人博客地址:http://crossoverjie.top。GitHub地址:https://github.com/crossoverJie。我们先来看看为什么这次重构后的目录结构要分模块。至于为什么要分模块呢?我们想象这样一个场景:在现在的互联网发展中,一个大系统会被拆分成各个子系统,以降低它们之间的耦合度。在一个子项目中,通常会有API、WEB、Service等模块。而当项目足够大时,这些通常不是一个人可以完成的任务,需要一个团队来分工。想象一下:当之前的所有项目都在一个模块中时,A改变了API,需要Deploy代码。而B也改了service的代码,但是并没有彻底完蛋。所以A在提交构建的时候会报错,而当整个项目足够大的时候,构建时间也会影响效率。但是我把模块分开后效果就不一样了。如果我修改API,我只需要自己管理,不需要构建整个项目。而且当有其他项目需要依赖我的API时,他们只需要依赖这个API,而不需要依赖整个项目。各模块的作用下面来看看我这次划分的模块。ROOT这是整个项目的根节点。先看一下其中的pom.xml:com.crossoverJieSSMpom2.0.0SSM-APISSM-BOOTSSM-SERVICESSM-WEBUTF-84.1.4.RELEASE2.5.06.0.1com.crossoverJieSSM-API2.0.0我截取了比较重要的配置,因为这是父节点,所以我的packag类型使用的是pom。分别有四个子模块。关注标签。如果你使用的是IDEA开发工具,可以看到下图:红色标记处有一个向下的箭头,点击它可以在子模块中输入相同的依赖。这样子模块不需要配置具体的版本,由父模块统一维护,也为后续的版本升级带来了好处。SSM-API接下来看API模块:通常这个模块用来定义对外接口,修改接口依赖的一些DTO类。一般该模块用于依赖其他项目,与本项目进行数据交互。SSM-BOOTBOOT是一个特殊的模块。可以看到这里没有代码,只有一个rpc配置文件。通常这个模块是用来依赖我们内部项目的,而不是像上面的API模块那样依赖于其他部门或者项目。因为我们的RPC调用的时候,以dubbo为例,是需要配置依赖消费者的。但是如果是我们自己的内部调用,我们可以在这里配置需要调用我们自己的dubbo服务提供者,这样我们就只能依赖这个BOOT来调用了。哦对了,BOOT也依赖API,这样只需要依赖BOOT就可以调用自己内部的dubbo服务了。如下:SSM-APISSM-SERVICESERVICE模块比较容易理解。它是处理具体业务逻辑的地方,也是前面API的实现。通常这也是一个web模块,所以我的pom类型是WAR。SSM-WEB其实WEB模块和SERVICE模块有一点重叠。一般来说,这个模块一般在一个对外提供http访问接口的项目中。这里只是为了展示项目结构,所以也写在这里。他的作用类似于服务,都是WAR类型。综上所述,本次并没有实现什么特别的功能,只是对于一些没有接触过这个项目结构开发的童鞋来说,只能起到一个引导作用。具体源码请关注我的github。项目地址:https://github.com/crossoverJie/SSM.git个人博客地址:http://crossoverjie.top。GitHub地址:https://github.com/crossoverJie。