可扩展性:将流程细化,降低系统业务之间耦合,便于后续功能扩展;
可维护性:适应永适应各种场景的使用,增加代码的复用性,提升了编程的效率;
扩展:计算机的任何问题可以通过中间层来解决;
M:数据处理的业务逻辑和数据
V:表现层,用户页面渲染展现
C:控制器,全盘统筹
终端显示层/开放API
请求处理层:controller
业务逻辑层/通用逻辑层:service
数据持久层/第三方服务:manage/dao
数据存储系统/第三方数据服务:jdbc,redis,
dao层:异常不打印日志
manager/service:跨服务器,AB服务器都需要打印日志,异常信息都需要记录日志信息
web:不能向上抛出异常,捕获异常之后,给用户一个友好性提示
开放性接口层:将异常处理为错误码和错误信息返回
DO:和数据库表一一对应,dao层向上传输信息
DTO:服务之间交换数据,不应该包含所有信息,设计序列化和反序列化处理
BO:业务对象,由service向上传输,可以是多个DO的组合信息,可以暴露所有信息,例如:controller层调用service 的数据,
QUERY:各层接受上层的查询请求,2个参数的传输需要封装查询,禁止map传输,例如:/user/queryByname/xiaoming
VO:显示层对象,web向模板渲染层传输,可以包含多个对象
管理项目中依赖和项目的构建
Ant(不能打包,管理依赖)、Maven(约定大于依赖,统一管理,)、Gradle
依赖管理,目录结构(依赖层级查询),项目构建阶段(maven的插件 test,jar,clean)
G:组织的ID,一般用组织的名称
A:依赖名称
V:版本号
如果在项目中同一个依赖被定义了多次,项目中依赖版本的确定遵循依赖仲裁原则:
1.DependencyManagement中依赖进行仲裁(父工程约定了子工程的依赖版本号)
例如:父工程依赖(spring-boot-parent)中的pom文件中会定义了相关的依赖(jdbc,spring-boot-starter-web等)
2.无依赖关系(DependencyManagement),按照最短的路径来确定版本(是否在同一个Pom文件中,优先使用同一个pom文件中依赖)
3.路径相同,按照第一声明优先原则(同一个Pom文件,相同依赖,优先使用先声明的依赖)
在依赖中增加exclusion标签,标签中添加去除的依赖,例如在spring-boot-starter-web中依赖中去掉tomcat的依赖(spring-boot-starter-tomcat)
扩展:jetty作用和Tomcat的依赖作用一致
在项目打包之前要排除依赖冲突,否则上线之后会有错误信息
一方库:工程内各个模块的依赖
二方库:公司内部的依赖库,公司内部其他项目的依赖
三方库:公司之外开源库,google,alibba,apache发布的依赖
G:com.{公司名称}.{业务线}.{子业务线},最高四级
A:产品名称—模块名称
V:1.0.0 主版本号(大规模的API和架构升级) 次版本号(相对兼容,少量API的修改,增加模块) 修订号(修改BUG或者兼容性)
不依赖SNAPSHOT版本(镜像版本)
使用RELEASE(正式版本)
类库版本号不允许覆盖升级
二方库升级或者新增时,保证其他jar包仲裁一致
依赖二方库群时,定义统一的版本号
GAV保持一致
使用建议:
底层基础技术框架、核心数据管理平台、或接近硬件谨慎引入
所有仲裁使用<.DependencyManagement>
二方库不需要配置型
不使用不稳定的工具包或Util类
精简原则:
移除不必要的API
只包含必须的API和工具类
可追溯原则
记录每个版本的变化
二方库位置,源码维护者
网络中实现信息传输的协议簇
应用层:HTTP,IP,SMAPT
传输层:TCO/UDP
网络层:IP/ARP
链路层:IEEE 802
物理层:网卡
IP:
TCP
SYN(建立连接的信息),ACK(确认信息),FIN(断开连接)
三次握手:
**总结:**建立连接需要AB机器都能获取对方的确认信息,才能建立连接;
作用:确认信息,防止超时
*断开连接–四次挥手:
TIME_WAIT 的默认时间是2分钟,过了2分钟,也会自动断开连接,谁发起来连接,谁最后断开连接
扩展:TIME_WAIT 时间可以设置减少,长期占用SOCKET连接数资源(1024),影响系统传输;
**总结:**断开连接需要保证AB机器都同时断开,连接才断开,所以需要AB机器向对方都发送fin信号来确认断开
服务器的优化:
TCP协议的time_wait超时时间
操作系统超时时间默认240s超时
调大服务器所支持的文件句柄数
JVM调优:
ORM异常时打印堆中异常信息
Xms和Xmx设置一样大小内存(堆内存4G以下)