企业级应用开发--解耦
企业级应用开发
(一)系统架构
前后端分离目的: 解耦
前端VUE 后端SpringBoot --->基于SpringCloud微服务架构体系
注:
- 前后端分离必然存在跨域问题,参考同源策略(协议+域名/IP地址+端口)
(二)开发工具
1. idea及插件:提升开发效率
2.tomcat/jboss:轻量级应用服务器
3.maven:第三方jar包统一管理(pom.xml nexus私服)
4.Gitlab: 代码管理工具(与svn本质的区别:本地仓库)
5.中间件技术:消息队列(MQ、kafka)、分布式缓存(redis)、分布式存储(fastdfs)
6. 数据库(MySQL、ORACLE) sql优化
7.postman:接口测试工具。
8.单元测试
。。。。
(三)分层思想
MVC分层思想: 解耦
Controller
- 接受页面请求参数,进行参数校验(hibernate-validation),校验失败,直接返回(避免使用方法的入参request、response等http对象)
- 调用service业务逻辑
- 返回json字符串(前后端分离的流行必然导致服务器端页面技术的淘汰,如:jsp、ext等)
注:Controller层中不允许编写业务逻辑代码
Service
- 依赖注入N个DAO层对象,尽量不要出现依赖注入service对象
- 依赖注入Manager成对象
- 处理核心业务逻辑
- 事务处理
注:
- 此处指的是本地事务(非分布式事务),底层采用aop机制,使用动态代理设计模式
- 一个写操作,不需要加事务,减少性能损耗
- 单纯的一个查询或多个查询(查询操作不会引发事务问题),不需要加事务,避免性能损耗
- 多个写操作,必须加事务,需要进行数据回滚
- 根据实际业务情况,分析业务场景,灵活应用@transactional注解(即加在类上,还是加在方法上,还是不需要加)
5. 调用持久层
注:
- 出现异常,如果有事务就自动回滚并记录日志。
- 日志细分为:warn级别或error级别
- 例如:执行写操作前需要查询一个数据作为后续操作的参数,如用户需要配置角色
- 如果角色为空,不执行后续业务代码,throw new ServiceException(“用户没有配置角色!”),记录warn级别日志
出现系统异常,不执行后续业务代码throw new ServiceException(e.getMessage(), e),记录error级别日志
Manage
- 操作中间件,如:缓存、分布式存储、消息队列等
- 调用第三方系统
注:
- 出现异常,记录日志(error级别),往上层抛出
Mapper
- 数据库增删改查
注:出现异常往上层抛出
(四)开发思路
增删改查开发思路:
- 自下而上开发,mapper->service->controller
微服务开发思路:
- pom.xml:加入各类starter,如:spring-boot-starter-web
- appliction.yml:不要使用application.properties,相较于appliction.yml代码可读性较差
- 启动类XxxApplication(@SpringBootApplication 自动配置、自动扫描、监控)
- 业务代码(mapper->service->controller)
(五)代码重构
功能完成只是项目开发的第一步,借助重构的手法,对已实现的代码进行优化
注:
- 重构:在不改变现有功能的前提下对代码进行优化,以提升代码质量
(六)工程结构