洋蔥

耳不闻人是非,目不视人之短,口不言人之过。

你好,我是王争。今天是春节,首先祝你在新的一年,学业进步,工作顺利。放假期间,也不要忘记学习啊!

到此为止,咱们的《设计模式之美》快要更新过半了。很多小伙伴反馈的问题我都看到了。这里我也来讲一下,到底该如何学习《设计模式之美》专栏,才能做到事半功倍、有的放矢?

阅读全文 »

上一节课,我们对整个专栏的理论知识点做了串讲复习,不知道你掌握得如何?对于上节课总结的重点内容,我希望你能多花点时间搞透彻,对于一些不那么重要的内容,我建议你把专栏当作工具资料,用到的时候随手查阅,再深入学习研究。

实际上,很多小伙伴反应,虽然理论掌握得差不多,专栏也很贴近实战,每个知识点的讲解都有结合实际的代码案例,并且最后还有集中的项目实战,但落实到自己写代码的时候,还是无法将学到的理论知识很好地应用到其中。今天,我们就再聊一聊,如何将设计思想、原则、模式等理论知识应用到实际的项目开发中。

话不多说,让我们正式开始今天的学习吧!

阅读全文 »

到今天为止,理论部分和实战部分都已经讲完了,整个专栏也接近尾声了。我这里用两节课的时间,带你一块复习一下前面学到的知识点。跟前面的讲解相对应,这两节课分别是针对理论部分和实战部分进行回顾总结。

今天,我先来带你回顾一下整个专栏的知识体系。我们整个专栏围绕着编写高质量代码展开,涵盖了代码设计的方方面面,主要包括面向对象、设计原则、编码规范、重构技巧、设计模式这五个部分。我们就从这五个方面,带你一块把之前学过的知识点串一遍。

阅读全文 »

上两节课,我们讲解了灰度组件的需求和设计思路。不管是之前讲过的限流、幂等框架,还是现在正在讲的灰度组件,这些框架、组件、类库的功能性需求都不复杂,相反,非功能性需求是开发的重点、难点。

今天,我们按照上节课给出的灰度组件的设计思路,讲解如何进行编码实现。不过今天对实现的讲解,跟前面两个实战项目有所不同。在前面两个项目中,我都是手把手地从最基础的MVP代码讲起,然后讲解如何review代码发现问题、重构代码解决问题,最终得到一份还算高质量的代码。考虑到已经有前面两个项目的学习和锻炼了,你应该对开发套路、思考路径很熟悉了,所以,今天我们换个讲法,就不从最基础的讲起了,而是重点讲解实现思路。

话不多说,让我们正式开始今天的学习吧!

阅读全文 »

上一节课,我们介绍了灰度组件的一个需求场景,将公共服务平台的RPC接口,灰度替换为新的RESTful接口,通过灰度逐步放量,支持快速回滚等手段,来规避代码质量问题带来的不确定性风险。

跟前面两个框架类似,灰度组件的功能性需求也比较简单。上一节课我们做了简单分析,今天我们再介绍一下,这个组件的非功能性需求,以及如何通过合理的设计来满足这些非功能性需求。

话不多说,让我们正式开始今天的学习吧!

阅读全文 »

到现在为止,我已经带你学习了接口限流框架和接口幂等框架两个实战项目。接下来,我再带你实战一个新的项目:灰度发布组件。这也是我们专栏的最后一个实战项目。还是老套路,我们把它分为分析、设计、实现三个部分、对应三节课来讲解。今天,我们对灰度发布组件进行需求分析,搞清楚这个组件应该具有哪些功能性和非功能性需求。

话不多说,让我们正式开始今天的学习吧!

阅读全文 »

上一节课,我们讲解了幂等框架的设计思路。在正常情况下,幂等框架的处理流程是比较简单的。调用方生成幂等号,传递给实现方,实现方记录幂等号或者用幂等号判重。但是,幂等框架要处理的异常情况很多,这也是设计的复杂之处和难点之处。比如,代码运行异常、业务系统宕机、幂等框架异常。

虽然幂等框架要处理的异常很多,但考虑到开发成本以及简单易用性,我们对某些异常的处理在工程上做了妥协,交由业务系统或者人工介入处理。这样就大大简化了幂等框架开发的复杂度和难度。

今天,我们针对幂等框架的设计思路,讲解如何编码实现。跟限流框架的讲解相同,对于幂等框架,我们也会还原它的整个开发过程,从V1版本需求、最小原型代码讲起,然后讲解如何review代码发现问题、重构代码解决问题,最终得到一份易读、易扩展、易维护、灵活、可测试的高质量代码实现。

话不多说,让我们正式开始今天的学习吧!

阅读全文 »

上一节课,我们介绍了幂等框架的一个重要需求场景,接口超时重试。为了避免同一业务被多次重复执行,接口需要支持幂等特性。同时,我们还对功能性需求和非功能性需求做了梳理。今天,我们来讲解幂等框架的设计思路。

跟限流框架类似,幂等框架的功能性需求也比较简单,但要考虑处理的异常情况有很多,比如业务代码异常、业务系统宕机、幂等框架异常。今天,我们重点讲解如何应对这些异常情况,设计一个高度容错的幂等框架。

话不多说,让我们正式开始今天的学习吧!

阅读全文 »

上三节课,我带你分析、设计、实现了一个接口限流框架。在分析阶段,我们讲到需求分析的两大方面,功能性需求分析和非功能性需求分析。在设计阶段,我们讲了如何通过合理的设计,在实功能性需求的前提下,满足易用、易扩展、灵活、高性能、高容错等非功能性需求。在实现阶段,我们讲了如何利用设计思想、原则、模式、编码规范等,编写可读、可扩展等高质量的代码实现。

从今天开始,我们来实战一个新的项目,开发一个通用的接口幂等框架。跟限流框架一样,我们还是分为分析、设计、实现三个部分,对应三节课来讲解。

话不多说,让我们正式开始今天的学习吧!

阅读全文 »

上一节课,我们介绍了如何通过合理的设计,来实现功能性需求的同时,满足易用、易扩展、灵活、低延迟、高容错等非功能性需求。在设计的过程中,我们也借鉴了之前讲过的一些开源项目的设计思想。比如,我们借鉴了Spring的低侵入松耦合、约定优于配置等设计思想,还借鉴了MyBatis通过MyBatis-Spring类库将框架的易用性做到极致等设计思路。

今天,我们讲解这样一个问题,针对限流框架的开发,如何做高质量的代码实现。说的具体点就是,如何利用之前讲过的设计思想、原则、模式、编码规范、重构技巧等,写出易读、易扩展、易维护、灵活、简洁、可复用、易测试的代码。

话不多少,让我们正式开始今天的学习吧!

阅读全文 »
0%