因为可能还有很多同学还不清楚上下文,所以简单介绍一下这个专栏要做的事:
天罡老哥和狗哥(博客主页)有意
从0到1
带大家搭建一个SpringBoot+SpringCloud+Vue
的前后端分离项目!
打造一个短小精悍、技术主流、架构规范的前后端分离实战项目!我负责后端,狗哥负责前端!
目的就是让大家通过项目实战,学到一些真东西,将所学理论落地,助力有心强大的你更快的成长!开启你的工作之旅,让开发游刃有余!
详细的后端规划和后端大纲思维导图在开篇已经给出,你可以到开篇查收:基于SpringBoot+SpringCloud+Vue前后端分离项目实战 --开篇。
上文带大家进行了后端开发环境的安装:天狗实战SpringBoot+Vue(一)环境安装
本文主要内容对应思维导图 二、项目结构搭建:创建Maven项目、三层架构说明、搭建三层架构,如下图红框处。
万丈高楼平地起,打好地基是关键,所以项目结构搭建是非常重要的!很多小细节,等你收割!OK,Let’s go!
通过本文,希望你能清楚的回答以下问题:
接下来,我会图文说明如何使用IDEA创建一个干净的Maven项目,只需2步!
第1步: 打开IDEA,从菜单点击File-》New-》Project
,如下图:
弹出【New Project】窗体,选择【Maven】,【Project SDK】 选择已安装的 JDK8,点击【Next】,如下图:
第2步:命名,定义Maven坐标
关键词提前说明:
tg
:天狗的缩写,是我和狗哥的组织名称book
: 图书,因为是图书相关项目,所以以book作为项目名称关于Maven坐标相关的GroupId、ArtifactId、Version说明(
这里有重点!!!
):
GroupId:组织名称:对应Maven坐标 groupId
规范做法是
单词间以.
分隔,是后面定义的package
的前缀。
例如:我定义的是:org.tg 那么对应 package 就会是 org.tg.*
额外说明: org是非营利组织,像org.springframe; 公司组织一般以com开头。
ArtifactId:项目名称:对应Maven坐标的 artifactId
规范做法是
多个单词以-
分隔,例如: tg-book
Version:版本号:对应Maven坐标的 version
以SNAPSHOT结尾的是快照版本,开发期间使用的版本,可以随时覆盖替换,方便迭代快速更新。
正式版一般是RELEASE结尾或者只有一个单纯的版本号,发布以后不能覆盖替换!
Name和Location说明:
以上都是通常建议的做法,当然,如果你不按这么做,也不会报错。
最后,点击【Finish】按钮,一个干净项目就创建好了,如下图:
不复杂的小项目,推荐使用经典的三层架构来搭建,非常易于理解,请求流向 如下图:
落地到当前项目,各层职责说明如下:
表现层:web层,提供controller,处理http请求,提供给前端的API;
业务逻辑层:service层,和业务相关,主要处理业务逻辑编排;
数据访问层:dal层,做数据访问,主要使用Mybatis与MySQL交互数据。
三层架构区分层次的目的是为了“
高内聚,低耦合
”。职责明确,避免调用混乱,让开发人员分工更明确,将精力更专注于应用系统核心业务逻辑的分析、设计和开发,加快项目的进度,提高了开发效率,有利于项目的更新和维护工作。
先思考一个问题:我们将所有代码都写在一个Project里可不可以?
当然可以!不会报错,程序也能正常运行,但从设计上来说,不推荐!
理由:
放在一起,由于层一层之间的界限不清晰,容易出现调用混乱,像web层直接调了dal层,dal层调了service层等等很多问题……因为项目并不会报错,只是乱而已。。。,久而久之项目就会越来越"腐败"
,最终难以维护,这也就和分层的初衷不符,达不到高内聚,低耦合
!
这里插一下,程序员应知:“破窗理论” 和 “童子军军规”,值得细品!
所以,不能依靠开发人员严格自律,那多累啊,所以需要从架构设计下点功夫,让开发更轻松,可靠的做法:应从架构设计上做到层与层之间的隔离!
落地的实现:
引申出来的问题:
如果分为多个Maven项目,那就涉及到包依赖版本
问题,如何解决?
通常的做法是会定义一个Maven父项目,统一管理包依赖版本!
OK,那让我们一一落地吧!
我们以上面创建的tg-book
作为父项目,接下来演示创建web层
的子项目:
点击选择:父项目上右键-》New-》Module
,如下图:
弹出的【New Module】窗体,依然是选择【Maven】,【Project SDK】 选择已安装的 JDK8,点击【Next】,如下图:
因为是web层,所以命名为tg-book-web
,其它层的Name命名也是一样的规律:tg-book-分层名称
。
当你修改了Name后,IDEA会自动同步修改ArtifactId和Location,GroupId保持不变,所以就没有其它修改了,如下图:
同样的做法,依次创建以下子Module
我们根据在《三层架构说明》处说明的请求流向和各层职责,来落地处理依赖关系。
首先,我们先将本项目的依赖放到父项目里统一管理,在父pom.xml
中增加dependencyManagement
节点,配置如下:
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.tggroupId>
<artifactId>tg-book-webartifactId>
<version>${project.version}version>
dependency>
<dependency>
<groupId>org.tggroupId>
<artifactId>tg-book-serviceartifactId>
<version>${project.version}version>
dependency>
<dependency>
<groupId>org.tggroupId>
<artifactId>tg-book-dalartifactId>
<version>${project.version}version>
dependency>
<dependency>
<groupId>org.tggroupId>
<artifactId>tg-book-commonartifactId>
<version>${project.version}version>
dependency>
dependencies>
dependencyManagement>
dependencyManagement说明:
Maven中的dependencyManagement
只是管理依赖版本,定义时不会真正导入,这是和直接定义dependencies
的区别!
作用:在其中声明所依赖包的版本信息后,其所有子项目引入此依赖jar包时,无需指定版本号。
由于Maven是会继承
的,所以我们从下至上
定义:
tg-book-common
因为common是为大家服务的,所以它不能依赖本项目中的任何项目。
tg-book-dal
依赖common。
具体做法:在pom.xml
中,增加dependencies
,引入tg-book-common的依赖:
<dependencies>
<dependency>
<groupId>org.tggroupId>
<artifactId>tg-book-commonartifactId>
dependency>
dependencies>
注意,这里就不用指定版本号了,因为由父pom的dependencyManagement
统一管理!
tg-book-service
依赖dal和common,因为会继承,dal里已经引入common,所以我们只引入dal即可!
具体做法:在pom.xml
中,增加dependencies
,引入tg-book-dal的依赖:
<dependencies>
<dependency>
<groupId>org.tggroupId>
<artifactId>tg-book-dalartifactId>
dependency>
dependencies>
tg-book-web
依赖service和common,同理,因为会继承,所以我们只引入service即可!
具体做法:在pom.xml
中,增加dependencies
,引入tg-book-service的依赖:
<dependencies>
<dependency>
<groupId>org.tggroupId>
<artifactId>tg-book-serviceartifactId>
dependency>
dependencies>
如果出现版本问题,找两个地方确认配置:File-》Project Structure
和File-》Settings
第一步,点击菜单File-》Project Structure
,对应的各配置如下:
第二步,点击菜单File-》Settings
,对应的配置如下:
Maven配置最好确认一下:
另外,Maven刷新依赖,有几个入口:
我最喜欢的是在最右侧的Maven选项卡,选中父项目,点上面的刷新图标,如下图:(或者右键Reload Project)
本文不仅带你实战了如何搭建项目结构,更主要的是教你学会为什么这么搭建项目,其中的原因,会遇到的问题,以及如何解决!
这也是你不管是谈毕设项目,还是面试谈实战项目,你能讲出来的亮点!
所以,还没订阅的同学,Come on! 请随我一起开启有趣的程序人生。。。
订阅SpringBoot实战专栏入口 :https://blog.csdn.net/scm_2008/category_12236048.html
订阅Vue实战专栏入口 :https://blog.csdn.net/xingyu_qie/category_12222258.html
另外,别忘了关注天哥:天罡gg ,发布新文不容易错过: https://blog.csdn.net/scm_2008
最后强调,必须动手实操,想实战就不要光看,到手的知识才属于你!让我了解一下大家的项目结构搭建情况,投票投票投票~~~