1.敏捷开发
敏捷开发以用户的需求进化为核心,采用迭代、循序渐进的方法进行软件开发。在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视、可集成和可运行使用的特征。换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态。
2.敏捷开发优势
如果不进行maven父子工程搭建会有什么问题:
一、业务耦合性高,体积大,A17 in one
所有的业务都在一个大工程里面,体积庞大,如果需求变更频繁,无法快速满足新业务快速上线和持续交付。
二、部署麻烦
开发时,一处修改,需要重启整个服务,启动耗时长。
每次局部小改动上线,需要对整个系统重新打包部署,部署周期长。
三、水平扩展性差
由于是单体应用,不能做某些局部功能对高并发要求高而单独部署,从而造成服务在某些时段响应特别慢。好医生预约挂号病例导入导出
---部署到服务器----并发量---集群
四、稳定性差
在某一时段,一个高并发请求会导致整个服务宕机,轻则响应慢,重则停止对外提供服务。给用户造成不可估量的损失。
五、代码维护成本高
业务在不停迭代的同时,源代码也在不停的更新迭代,源代码的作者也是换了一波又一波,造成后来者很难理解和维护这些代码,更为恐怖的是多处地方出现重复的代码。
3.项目拆分
横向拆分,即按照不同的业务功能,拆分成不同的微服务,如天气数据采集、数据存储、天气查询等服务,形成独立的业务领域微服务集群
纵向拆分,即把一个业务功能里的不同模块或组件进行拆分。例如,把公共组件拆分成独立的基础设施,下沉到底层,形成相对独立的基础设施层
4.项目纵向拆分
1. 创建一个maven项目 作为所有项目的父目录
选择quickstart 。 创建完成之后将src目录删除 配置pom文件为父项目
<?xml version="1.0" encoding="UTF-8" ?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.aaa</groupId>
<artifactId>haoyisheng</artifactId>
<name>haoyisheng</name>
<packaging>pom</packaging>
</project>
2.选择父项目 右键-- new module
在此处创建子项目
此时在创建的子项目的pom文件中会出现
<parent>
<groupId>com.aaa</groupId>
<artifactId>haoyisheng</artifactId>
<version>Unknown</version>
</parent>
而在父项目中会出现
<modules>
<module>nd-common</module>
<module>nd-service</module>
<module>nd-admin</module>
</modules>
此时一个父子项目就搭建好了
5.项目依赖
nd-common 公共资源(工具类等)
nd-service 业务操作(service mapper domain)
nd-admin 对外API (controller)
需要在项目中导入这个依赖 才能完成项目之间的互相调用
admin 依赖 service 就是在admin的pom中导入service的依赖
<dependency>
<groupId>com.aaa</groupId>
<artifactId>nd-service</artifactId>
<version>1.0-SNAPSHOT</version>
</dependency>
6.项目的第三方依赖
1.在父项目的pom文件中 导入所有的jar包 所有子项目都可以用
但是在子项目中,往往不需要部分jar包
所以子项目只需要使用它所需要的jar包
2.各自导入各自需要的都需要的在最底层导入
nd-commpn 公共资源((工具类等) 1ombok spring aop
nd-service 业务操作(service mapper domain) mybatis
nd-admin 对外API (contro1ler) mvc
common中需要 lombok但是 service依赖于common 会导致lombok也会导入到service中
3.
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
<optional>true</optional> 设置为true表示不可依赖传递
</dependency>
这样会导致版本迭代问题
4. 解决方案:在父项目中引入 子项目中添加
父项目pom
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.28</version>
</dependency>
</dependencies>
</dependencyManagement>
子项目pom
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>