开课吧T31项目第8天
T31项目第8天
- 工程结构规约
- 1.应用分层
- 1.1分层作用:
- 1.2分层架构示例
- 1.2.1 MVC框架
- 1.2.2 分层结构
- 1.3分层异常处理
- 1.3分层领域模型
- 2.maven
- 2.1构建工具
- 2.2主要功能
- 2.3 G A V
- 2.4 依赖仲裁
- 2.5 排除依赖
- 3.二方库依赖
- 3.1GAV的定义
- 3.2G 引入二方库的规约
- 3.2G 引入二方库的原则
- 4.TCP/ICP
- 4.1 五层结构
- 4.2 IP协议的报头
- 5.服务器设定
- 5.1 高并发服务器参数调优
今天是孤尽班第八天学习,今天跟着无尘老师学习了工程结构的规约,包括应用层设计、Maven、二方库、TCP/IP、服务器调优的方法。
工程结构规约
1.应用分层
1.1分层作用:
可扩展性:将流程细化,降低系统业务之间耦合,便于后续功能扩展;
可维护性:适应永适应各种场景的使用,增加代码的复用性,提升了编程的效率;
扩展:计算机的任何问题可以通过中间层来解决;
1.2分层架构示例
1.2.1 MVC框架
M:数据处理的业务逻辑和数据
V:表现层,用户页面渲染展现
C:控制器,全盘统筹
1.2.2 分层结构
终端显示层/开放API
请求处理层:controller
业务逻辑层/通用逻辑层:service
数据持久层/第三方服务:manage/dao
数据存储系统/第三方数据服务:jdbc,redis,
1.3分层异常处理
dao层:异常不打印日志
manager/service:跨服务器,AB服务器都需要打印日志,异常信息都需要记录日志信息
web:不能向上抛出异常,捕获异常之后,给用户一个友好性提示
开放性接口层:将异常处理为错误码和错误信息返回
1.3分层领域模型
DO:和数据库表一一对应,dao层向上传输信息
DTO:服务之间交换数据,不应该包含所有信息,设计序列化和反序列化处理
BO:业务对象,由service向上传输,可以是多个DO的组合信息,可以暴露所有信息,例如:controller层调用service 的数据,
QUERY:各层接受上层的查询请求,2个参数的传输需要封装查询,禁止map传输,例如:/user/queryByname/xiaoming
VO:显示层对象,web向模板渲染层传输,可以包含多个对象
2.maven
管理项目中依赖和项目的构建
2.1构建工具
Ant(不能打包,管理依赖)、Maven(约定大于依赖,统一管理,)、Gradle
2.2主要功能
依赖管理,目录结构(依赖层级查询),项目构建阶段(maven的插件 test,jar,clean)
2.3 G A V
G:组织的ID,一般用组织的名称
A:依赖名称
V:版本号
2.4 依赖仲裁
如果在项目中同一个依赖被定义了多次,项目中依赖版本的确定遵循依赖仲裁原则:
1.DependencyManagement中依赖进行仲裁(父工程约定了子工程的依赖版本号)
例如:父工程依赖(spring-boot-parent)中的pom文件中会定义了相关的依赖(jdbc,spring-boot-starter-web等)
2.无依赖关系(DependencyManagement),按照最短的路径来确定版本(是否在同一个Pom文件中,优先使用同一个pom文件中依赖)
3.路径相同,按照第一声明优先原则(同一个Pom文件,相同依赖,优先使用先声明的依赖)
2.5 排除依赖
在依赖中增加exclusion标签,标签中添加去除的依赖,例如在spring-boot-starter-web中依赖中去掉tomcat的依赖(spring-boot-starter-tomcat)
扩展:jetty作用和Tomcat的依赖作用一致
在项目打包之前要排除依赖冲突,否则上线之后会有错误信息
3.二方库依赖
一方库:工程内各个模块的依赖
二方库:公司内部的依赖库,公司内部其他项目的依赖
三方库:公司之外开源库,google,alibba,apache发布的依赖
3.1GAV的定义
G:com.{公司名称}.{业务线}.{子业务线},最高四级
A:产品名称—模块名称
V:1.0.0 主版本号(大规模的API和架构升级) 次版本号(相对兼容,少量API的修改,增加模块) 修订号(修改BUG或者兼容性)
3.2G 引入二方库的规约
不依赖SNAPSHOT版本(镜像版本)
使用RELEASE(正式版本)
类库版本号不允许覆盖升级
二方库升级或者新增时,保证其他jar包仲裁一致
依赖二方库群时,定义统一的版本号
GAV保持一致
使用建议:
底层基础技术框架、核心数据管理平台、或接近硬件谨慎引入
所有仲裁使用<.DependencyManagement>
二方库不需要配置型
不使用不稳定的工具包或Util类
3.2G 引入二方库的原则
精简原则:
移除不必要的API
只包含必须的API和工具类
可追溯原则
记录每个版本的变化
二方库位置,源码维护者
4.TCP/ICP
网络中实现信息传输的协议簇
4.1 五层结构
应用层:HTTP,IP,SMAPT
传输层:TCO/UDP
网络层:IP/ARP
链路层:IEEE 802
物理层:网卡
4.2 IP协议的报头
IP:
TCP
SYN(建立连接的信息),ACK(确认信息),FIN(断开连接)
三次握手:
**总结:**建立连接需要AB机器都能获取对方的确认信息,才能建立连接;
作用:确认信息,防止超时
*断开连接–四次挥手:
TIME_WAIT 的默认时间是2分钟,过了2分钟,也会自动断开连接,谁发起来连接,谁最后断开连接
扩展:TIME_WAIT 时间可以设置减少,长期占用SOCKET连接数资源(1024),影响系统传输;
**总结:**断开连接需要保证AB机器都同时断开,连接才断开,所以需要AB机器向对方都发送fin信号来确认断开
5.服务器设定
5.1 高并发服务器参数调优
服务器的优化:
TCP协议的time_wait超时时间
操作系统超时时间默认240s超时
调大服务器所支持的文件句柄数
JVM调优:
ORM异常时打印堆中异常信息
Xms和Xmx设置一样大小内存(堆内存4G以下)
开课吧T31项目第8天相关推荐
- 开课吧T31项目第6天
T31项目第6天 日志设计 日志设计作用 T31项目异常分析 日志设计核心思想 错误码设计 今天是孤尽班第6天学习,今天主要对日志设计的做了一些梳理和思考. 日志设计 日志设计作用 日志的作用分为三点 ...
- 开课吧T31项目第14天
T31项目第14天 学习总结 1. 知识点总结 1. 1工程结构规约 1. 2项目架构设计 1. 3编码规约 2. 知识点扩展学习和思考 不知不觉在孤尽班已经跟着老师学习了2周,这一周对我来说,这周学 ...
- 开课吧T31项目第13天
T31项目第13天 接口文档 1.接口文档的作用 2.接口文档编写的规范 3.接口文档编写实例 4.java实现接口文档的技术 今天是孤尽班学习的第13天,今天学习了接口文档的编写规范 接口文档 1. ...
- 开课吧T31项目第9天
T31项目第9天 项目架构设计 1.项目业务分析 2.项目架构选型 3.项目主要模块功能 4. 项目使用技术栈 5. 项目问题分析(后续补充) 项目架构设计 1.项目业务分析 该系统模拟12306购票 ...
- 开课吧T31项目第10天
T31项目第10天 技术架构选型 1.架构技术架构选项 1.1 巨石架构(单体架构) 1.2 SOA架构 1.3 微服务 1.4 Spring-boot(优秀的构建项目的框架) 1.5 Spring- ...
- 开课吧T31项目第2天
T31项目第2天 1.UML 1.1UML图分类 2.T31项目 2.1 系统用例图 2.1.1 用例图设计要素 2.1.2 模块之间的关系 2.1.3 用例图设计总结 2.2系统时序图 2.2.1 ...
- T31项目架构选型方案
服务选型 曾经的技术选型 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GjyeLuSg-1636378253985)(C:\Users\Zyf\Desktop\T31 ...
- 孤尽T31项目Day3
孤尽T31项目Day3 Mysql设计规范 1 建表规约 1.1 表.字段的命名 1.必须使用小写字母或数字. 2.禁止出现数字开头. 3.禁止两个下划线中间只出现数字. 4.不使用复数名词. 5.禁 ...
- 孤尽T31项目第6天-Java项目工程结构规约
文章目录 前言 一.应用分层 1. 分层的目的 2. MVC框架模式 3. 推荐的分层结构 4. 分层的异常处理 5. 分层数据模型 二.Maven管理 1. Maven的作用 2. 构建 3. Ma ...
最新文章
- androidwakelock_Android音频播放时wakelock的实现
- 构造方法前可以用public修饰吗_程序员,你连反射都不会,还敢说自己会Java吗?...
- 计算二叉树叶子节点的数目
- 法线有接缝_发送带有接缝的活动邀请
- extjs中Store和grid的刷新问题
- nuxt添加.html,Nuxt内导航栏的两种实现方式
- P1540 机器翻译 模拟
- 国内Maven仓库--阿里云Aliyun仓库地址及设置
- Linux批量清空当前目录中的日志文件
- h3csyslog_H3C-syslog配置命令
- bmp格式如何转换成jpg?
- 学术答辩PPT模板分享
- 目前服务器cpu主流参数,服务器CPU天梯图-包含所有主流设备及服务器处理器
- python 处理word 分页符、分节符
- Openwrt平台搭建
- 用 Python 编辑 PDF 文件
- unity3d 反射获取面板的Rotation的值
- 微信抢抢票服务器,已有多人被坑!抢票“加速包”慎用!
- 有关阿里云ECS访问端口和加入安全组的说明
- axure树形表格_表格 树形菜单/excel 如何实现分级显示,也就是树形的菜单
热门文章
- Linux centos+selenium+firefox+java (无图形界面)获取动态网页
- 常见的免费遥感卫星数据服务网站
- BZOJ 4407: 于神之怒加强版|莫比乌斯反演
- 【Go进阶】如何让你Go项目中日志清晰有趣-Zap日志库
- 手把手教你学51单片机-变量进阶与点阵LED
- 你手上有50万,你会干什么?
- ImageJ如何测量物体的面积大小
- 华兴数控g71外圆循环编程_G71外圆循环
- 艾永亮:超级产品战略助戴森品牌C位出道,它却在汽车行业栽跟头
- React使用echarts-for-react