项目上把 Spring 的 IOC 搞得那么快,实际上就是把那些本来该是单例的类给弄成线程保险的,然后直接让 Spring 自己去猜哪位该如何复用。
那会儿我们写 Service 层,每个业务方式都要成个独立的类,结局前端一加了个 Redis,后端又加个 MQ,全写进 Service 里,结局查起来不得不遍历一遍整个 Service 包,效率低得能掉人海里。
后来把 Service 拆了,拆成了 Controller 和 API 的层,再加上 DAO 层的注解,业务逻辑被彻底剥离出来。后端直接写接口文档,前端接个 JSON,数据传输变成了一模一样的字符串,中间多了个缓存层,但没多一层代码逻辑。
启动的时候,Spring 的自动扫描像一阵风,扫到 Controller 里的注解就自动注册,扫描到 Service 里的类就注册,扫描到 DAO 里的实体就自动装配。
这时候我不再手动写 `@Autowired` 要么写 `@Service` 了,出于这俩注解纯粹就是告诉 Spring “这个类我要用”,它自己就能知道。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
数据库这块儿,那会儿每次查数据都得写个 SQL 语句,还要管事务,目前用 MyBatis 要么 JPA 这种 ORM 框架,后端连个 SQL 都懒得写,直接写个接口就行。后端把数据查出来,前端直接拿这个 JSON 数组,前端再根据 ID 过滤,前端再根据条件排序,后端自动处理的。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
缓存这块儿,那会儿每次查数据都得写个 SQL 语句,还要管事务,目前用 Redis 要么 Memcache 这种缓存框架,后端连个 SQL 都懒得写,直接写个接口就行。后端把数据查出来,前端直接拿这个 JSON 数组,前端再根据 ID 过滤,前端再根据条件排序,后端自动处理的。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
项目上把 Spring 的 IOC 搞得那么快,实际上就是把那些本来该是单例的类给弄成线程保险的,然后直接让 Spring 自己去猜哪位该如何复用。
那会儿我们写 Service 层,每个业务方式都要成个独立的类,结局前端一加了个 Redis,后端又加个 MQ,全写进 Service 里,结局查起来不得不遍历一遍整个 Service 包,效率低得能掉人海里。
后来把 Service 拆了,拆成了 Controller 和 API 的层,再加上 DAO 层的注解,业务逻辑被彻底剥离出来。后端直接写接口文档,前端接个 JSON,数据传输变成了一模一样的字符串,中间多了个缓存层,但没多一层代码逻辑。
启动的时候,Spring 的自动扫描像一阵风,扫到 Controller 里的注解就自动注册,扫到 Service 里的类就注册,扫到 DAO 里的实体就自动装配。
这时候我不再手动写 `@Autowired` 要么写 `@Service` 了,出于这俩注解纯粹就是告诉 Spring “这个类我要用”,它自己就能知道。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
数据库这块儿,那会儿每次查数据都得写个 SQL 语句,还要管事务,目前用 MyBatis 要么 JPA 这种 ORM 框架,后端连个 SQL 都懒得写,直接写个接口就行。后端把数据查出来,前端直接拿这个 JSON 数组,前端再根据 ID 过滤,前端再根据条件排序,后端自动处理的。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
缓存这块儿,那会儿每次查数据都得写个 SQL 语句,还要管事务,目前用 Redis 要么 Memcache 这种缓存框架,后端连个 SQL 都懒得写,直接写个接口就行。后端把数据查出来,前端直接拿这个 JSON 数组,前端再根据 ID 过滤,前端再根据条件排序,后端自动处理的。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
实际上项目上用的这些技术,说白了就是为了让开发速度更快,而不是为了性能更好。
那会儿我们写代码,每一行都是精心打磨的,注释写得密密麻麻,文档写得面面俱到,结局上线后才发现有个地方逻辑有点乱,还得花两天工夫去改。目前把代码按规则切分,按职责划分,前端只管调接口,后端只管处理数据,中间就没有富余的逻辑。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
这种架构在大型项目中特别好用,出于大家都不去碰底层的逻辑,只负责上面的层。前端只要写个接口文档,后端自动处理,前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
不过这种写法也有点累,出于链路忒长,中间多了几个环节,万一中间哪个环节出难题了,整个链路都得停。
那会儿我们写代码,每一行都是精心打磨的,注释写得密密麻麻,文档写得面面俱到,结局上线后才发现有个地方逻辑有点乱,还得花两天工夫去改。目前把代码按规则切分,按职责划分,前端只管调接口,后端只管处理数据,中间就没有富余的逻辑。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
自然,这种架构在大型项目中特别好用,出于大家都不去碰底层的逻辑,只负责上面的层。前端只要写个接口文档,后端自动处理,前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
这种写法也有点累,出于链路忒长,中间多了几个环节,万一中间哪个环节出难题了,整个链路都得停。
那会儿我们写代码,每一行都是精心打磨的,注释写得密密麻麻,文档写得面面俱到,结局上线后才发现有个地方逻辑有点乱,还得花两天工夫去改。目前把代码按规则切分,按职责划分,前端只管调接口,后端只管处理数据,中间就没有富余的逻辑。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
总而言之,这种架构在大型项目中特别好用,出于大家都不去碰底层的逻辑,只负责上面的层。前端只要写个接口文档,后端自动处理,前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
实际上项目上用的这些技术,说白了就是为了让开发速度更快,而不是为了性能更好。
那会儿我们写代码,每一行都是精心打磨的,注释写得密密麻麻,文档写得面面俱到,结局上线后才发现有个地方逻辑有点乱,还得花两天工夫去改。目前把代码按规则切分,按职责划分,前端只管调接口,后端只管处理数据,中间就没有富余的逻辑。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
总而言之,这种架构在大型项目中特别好用,出于大家都不去碰底层的逻辑,只负责上面的层。前端只要写个接口文档,后端自动处理,前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
这种写法也有点累,出于链路忒长,中间多了几个环节,万一中间哪个环节出难题了,整个链路都得停。
那会儿我们写代码,每一行都是精心打磨的,注释写得密密麻麻,文档写得面面俱到,结局上线后才发现有个地方逻辑有点乱,还得花两天工夫去改。目前把代码按规则切分,按职责划分,前端只管调接口,后端只管处理数据,中间就没有富余的逻辑。前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。
总而言之,这种架构在大型项目中特别好用,出于大家都不去碰底层的逻辑,只负责上面的层。前端只要写个接口文档,后端自动处理,前端一请求,后端拿到接口后,自动查缓存,没缓存了就自动查数据库,查完数据自动分给对应的 Controller 处理,处理完自动回结局。整个过程就像流水线工作,每个环节分工明确,前一个环节终止,后一个环节立马启动,中间没有富余的等待和复调。