一、敏捷开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
我们会想一下我们的一阶段项目,发现有问题: 如果某个人的代码出问题 整个项目都崩了。
其实敏捷开发可以简单理解成 就是利用maven,构建父子项目
二、敏捷开发的优势
我们反过来想如果不进行敏捷开发maven的父子工程会有什么坏处
- 业务耦合性高,体积大
所有业务都在一个项目里面,体积庞大,如果变更频繁,无法快速满足新业务的上线和持续交付 - 部署麻烦
开发时,一处修改,需重启整个服务,启动耗时长
一处小改动,需重启整个项目重新打包部署,部署周期时间长 - 水平扩展性差
由于是单体应用不能对高并发的场景进行单独部署,从而造成服务响应慢 - 稳定性差
在某一个时段,一个高并发的请求会导致真个服务宕机,轻则响应慢,重则对外停止访问,给客户造成不可估计的损失 - 代码维护成本高
业务在不断的更新迭代,源代码也正在不断的更新迭代,源码的作者也是换了一批有一批,造成后者对前者写的代码很难理解和维护,更恐怖的是还有很多地方是重复代码
三、父子项目的拆分方式
1.横向拆分,即按照不同的业务功能,拆分成不同的微服务,如天气数据采集、数据存储、天气查询等服务,形成独立的业务领域微服务集群
2.纵向拆分,即把一个业务功能里的不同模块或组件进行拆分。例如,把公共组件拆分成独立的基础设施,下沉到底层,形成相对独立的基础设施层
四、项目搭建
A 创建一个maven的quickstart [作为父项目使用]
B 将父项目src的内容全部干点 并且pom文件的 packaging改成pom父项目 war web项目 jar java项目默认
C 在父项目中右键 选择new 选择module 创建子项目
注意 我们创建完成子项目之后 在子项目中的pom文件里面有一个配置 标明当前项目的父项目是谁
<parent>
<artifactId>hahaha</artifactId>
<groupId>com.aaa.cainilove</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
同时在总项目的pom中也有一个配置
<modules>
<module>hahaha-admin</module>
</modules>
D 导入依赖
xxx-commom 公共模块
xxx-system service mapper entity
xxx-admin 控制层
1 如果多层都用到 则再基层导入 其他项目可以依赖传递
2 有的项目只有某一层用到 我们就在这一层导入 并且要阻断传递
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<optional>true</optional>
</dependency>
E 项目清单
我们现在导包的方式 如果项目构建好了 将来有个新手接手了咱的项目,此时他可能不知道当前项目导了哪些包?
所以我们需要在父项目中构建项目清单
但是并不是在父项目的pom中写
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.3.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>5.3.12</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.12</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.20</version>
<optional>true</optional>
</dependency>
</dependencies>
这样写 代表导入 换句话说 就是所有工程都导入这些包 这是不合适的
所以我们需要这样配置
<properties>
<spring.version>5.3.12</spring.version>
<lanbok.version>1.18.20</lanbok.version>
</properties>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lanbok.version}</version>
<optional>true</optional>
</dependency>
</dependencies>
</dependencyManagement>
添加dependencyManagement 之后 代表导入这些jar包 但是并没有传递给每个子项目,也就是说 哪个子项目中需要 哪个再单独导入
并且子项目中 不需要再写版本号