设计模式之美 / 前Google工程师手把手教你写高质量代码
王争
前Google工程师,《数据结构与算法之美》专栏作者
 
  • 课程目录
  • 课程介绍
  • 开篇词 | 一对一的设计与编码集训,让你告别没有成长的烂代码!

    如果说“数据结构与算法之美”是教你如何写出高效的代码,那这个设计模式专栏就是教你如何写出高质量的代码。

  • 01 | 为什么说每个程序员都要尽早地学习并掌握设计模式相关知识?

    设计模式作为一门与编码、开发有着直接关系的基础知识,是你现在就要开始学习的。

  • 02 | 从哪些维度评判代码质量的好坏?如何具备写出高质量代码的能力?

    辨别代码写得“好”还是“烂”,是写出好代码的前提。如果连什么是好代码、什么是烂代码,都分辨不清,又谈何写出好代码呢?

  • 03 | 面向对象、设计原则、设计模式、编程规范、重构,这五者有何关系?

    今天的内容相当于专栏的一个教学大纲或者学习框架,能让你对整个专栏的知识点有一个全局的了解。

  • 04 | 理论一:当谈论面向对象的时候,我们到底在谈论什么?

    专栏正文的第一个模块,我会讲一些设计原则、设计思想,为之后学习设计模式做铺垫。

  • 05 | 理论二:封装、抽象、继承、多态分别可以解决哪些编程问题?

    理解面向对象编程及面向对象编程语言的关键就是理解其四大特性:封装、抽象、继承、多态。

  • 06 | 理论三:面向对象相比面向过程有哪些优势?面向过程真的过时了吗?

    在过往的工作中,我发现很多人搞不清面向对象和面向过程的区别,总以为使用面向对象编程语言来做开发,就是在进行面向对象编程。

  • 07 | 理论四:哪些代码设计看似是面向对象,实际是面向过程的?

    面向过程编程真的无用武之地了吗?有必要杜绝在面向对象编程中写面向过程风格的代码吗?

  • 08 | 理论五:接口vs抽象类的区别?如何用普通的类模拟抽象类和接口?

    你熟悉的编程语言,是否有现成的语法支持接口和抽象类呢?具体是如何定义的呢?

  • 09 | 理论六:为什么基于接口而非实现编程?有必要为每个类都定义接口吗?

    我们继续讲“基于接口而非实现编程”。这个原则是一种非常有效的提高代码质量的手段,在平时的开发中特别经常被用到。

  • 10 | 理论七:为何说要多用组合少用继承?如何决定该用组合还是继承?

    组合不是完美的,继承也并非一无是处。在实际的项目开发中,我们要根据具体情况,来选择该用继承还是组合。

  • 11 | 实战一(上):业务开发常用的基于贫血模型的MVC架构违背OOP吗?

    对于业务不复杂的系统开发,基于贫血模型的传统开发模式简单够用;如果是复杂的,那基于充血模型的DDD开发模式更有优势。

  • 12 | 实战一(下):如何利用基于充血模型的DDD开发一个虚拟钱包系统?

    今天我们看,如何用基于贫血模型的传统开发模式和基于充血模型的DDD开发模式,来设计实现一个钱包系统。

  • 13 | 实战二(上):如何对接口鉴权这样一个功能开发做面向对象分析?

    需求分析的过程实际上是一个不断迭代优化的过程。不要试图一下就给出一个完美的解决方案。

  • 14 | 实战二(下):如何利用面向对象设计和编程开发接口鉴权功能?

    面向对象分析的产出是详细的需求描述。面向对象设计的产出是类。在面向对象设计这一环节,我们将需求描述转化为具体的类的设计。

  • 15 | 理论一:对于单一职责原则,如何判定某个类的职责是否够“单一”?

    不同的应用场景、不同阶段的需求背景、不同的业务层面,对同一个类的职责是否单一,可能会有不同的判定结果。

  • 16 | 理论二:如何做到“对扩展开放、修改关闭”?扩展和修改各指什么?

    开闭原则是SOLID中最难理解、最难掌握,同时也是最有用的一条原则。

  • 17 | 理论三:里式替换(LSP)跟多态有何区别?哪些代码违背了LSP?

    整体上来讲,这个设计原则是比较简单、容易理解和掌握的。今天我主要通过几个反例,带你看看,哪些代码是违反里式替换原则的。

  • 18 | 理论四:接口隔离原则有哪三种应用?原则中的“接口”该如何理解?

    接口隔离原则提供了一种判断接口的职责是否单一的标准:通过调用者如何使用接口来间接地判定。

  • 19 | 理论五:控制反转、依赖反转、依赖注入,这三者有何区别和联系?

    控制反转是一个比较笼统的设计思想,并不是一种具体的实现方法,一般用来指导框架层面的设计。

  • 20 | 理论六:我为何说KISS、YAGNI原则看似简单,却经常被用错?

    代码行数越少并不代表代码越简单,我们还要考虑逻辑复杂度、实现难度、代码的可读性等。

  • 21 | 理论七:重复的代码就一定违背DRY吗?如何提高代码的复用性?

    我们今天讲三种代码重复的情况:实现逻辑重复、功能语义重复、代码执行重复。

  • 22 | 理论八:如何用迪米特法则(LOD)实现“高内聚、松耦合”?

    “高内聚、松耦合”是一个非常重要的设计思想,能够有效提高代码的可读性和可维护性,缩小功能改动导致的代码改动范围。

  • 23 | 实战一(上):针对业务系统的开发,如何做需求分析和设计?

    技术人也要有一些产品思维。对于产品设计、需求分析,我们要学会“借鉴”,一定不要自己闷头想。

  • 24 | 实战一(下):如何实现一个遵从设计原则的积分兑换系统?

    从表面上看,做业务开发可能不是特别有技术挑战。实际上,如果要做到透彻理解,并不是件容易的事情。

  • 25 | 实战二(上):针对非业务的通用框架开发,如何做需求分析和设计?

    今天我们分享几个设计复杂框架小技巧:画产品线框图、聚焦简单应用场景、设计实现最小原型、画系统设计图。

  • 26 | 实战二(下):如何实现一个支持各种统计规则的性能计数器?

    写代码的过程本就是一个修修改改、不停调整的过程,肯定不是一气呵成的。所以,迭代思维很重要,不要刚开始就追求完美。

  • 加餐一 | 用一篇文章带你了解专栏中用到的所有Java语法

    考虑到有些同学并不熟悉Java语言,我今天用一篇文章介绍一下专栏中用到的Java语法。

  • 27 | 理论一:什么情况下要重构?到底重构什么?又该如何重构?

    今天的内容主要是让你建立持续重构意识。很多技术问题不是单纯靠技术来解决的,更重要的是要有意识。

  • 28 | 理论二:为了保证重构不出错,有哪些非常能落地的技术手段?

    你参与的项目有没有写单元测试?单元测试是否足够完备?贯彻执行写单元测试的过程中,遇到过哪些问题?又是如何解决的?

  • 29 | 理论三:什么是代码的可测试性?如何写出可测试性好的代码?

    依赖注入是编写可测试性代码的最有效手段。

  • 30 | 理论四:如何通过封装、抽象、模块化、中间层等解耦代码?

    过于复杂的代码往往在可读性、可维护性上都不友好。解耦保证代码松耦合、高内聚,是控制代码复杂度的有效手段。

  • 31 | 理论五:让你最快速地改善代码质量的20条编程规范(上)

    我根据自己的开发经验,总结罗列了20条我个人觉得最好用的编码规范。掌握这20条编码规范,能你最快速地改善代码质量。

  • 32 | 理论五:让你最快速地改善代码质量的20条编程规范(中)

    我们其实很难说哪种代码风格更好。在团队、项目中保持风格统一,让代码像同一个人写出来的。这才是实际工作中要实现的目标。

  • 加餐二 | 设计模式、重构、编程规范等相关书籍推荐

    如果你想要学好设计模式,肯定是要看书的。我结合自己的经验,为你打造了一份读书单,配合专栏一块儿学,效果会更好!

特别放送(随专栏不定期更新中)

第一期:一篇文章带你了解专栏所有Java语法

第二期:设计模式、重构、编程规范等相关书籍推荐

专栏简介

设计模式对你来说,应该不陌生。在面试中,经常会被问到;在工作中,有时候也会用到。一些设计模式书籍,比如大名鼎鼎的GoF的《设计模式》、通俗易懂的《Head First设计模式》,估计你也都研读过。那你是否觉得自己已经掌握了设计模式呢?是否思考过怎么才算真正掌握了设计模式呢?是熟练掌握每种设计模式的原理和代码实现吗?

搞懂23种经典的设计模式,并不是件难事。你随便找本书看看就差不多了。难的是如何不生搬硬套、恰到好处地将其应用到实际的项目中。即便如此,这也并不是我们的最终目标。毕竟设计模式只是解决问题的一个方法,我们最终的目标还是要写出高质量的代码。

单纯学习设计模式,并不能让你写出更好的代码。这就像单纯地了解编程语言的语法,也不能算是会写代码一样。单纯看书,对于设计模式的掌握、代码能力的锻炼,你只能达到10%,剩下的90%还是要靠在实战中刻意练习。

而大部分工程师可能都是偏业务开发,在平时做的项目中,很少有高密度地使用各种设计模式的机会,所以这方面的锻炼肯定不多。

因此,王争结合自己过去十多年工作中积累的项目经验,为每节课、每个知识点都设计了真实的代码实例。希望用8个月的时间,通过整个专栏200多个实战案例,手把手带你高强度、刻意地练习设计模式,潜移默化地提高你的设计编码能力,教会你如何编写高质量代码,帮你跨过知识到应用的鸿沟。

作者简介

王争,《数据结构与算法之美》作者,前Google工程师,从事Google翻译、知识图谱等相关系统的开发。曾任某金融公司核心系统资深系统架构师,负责公司核心业务的架构设计和开发工作。工作十多年,干过架构、做过产品、带过团队、创过业,最后发现还是最喜欢写代码,始终没有脱离编码第一线。

你将获得

  • 23 种设计模式与范式实战精讲
  • 200+ 真实案例分析设计与实现
  • 顶尖互联网公司的编程经验分享
  • 应对设计模式面试的思路与技巧

课程设计

一、专栏会讲哪些知识?

整个专栏以23种设计模式为核心,从面向对象、设计原则、编程规范、代码重构铺开,带你追本溯源,一次性全面掌握编写高质量代码的所有知识。下面是专栏的知识概览图。

二、专栏模块是怎么设置的?

专栏共100期正文和10期不定期加餐,分为5个模块。

学习导读部分,首先帮你明确设计模式知识的实际用途,帮你梳理最重要、最常用的7大代码评判标准,带你认识整个课程的知识框架,明确学习的任务,为后面的具体学习做好准备。

设计原则与思想部分,将为你详细讲解面向对象、设计原则、编码规范、重构技巧等基础编码知识。每一个知识点分别通过“理论篇”来精讲,通过“实战篇”带你应用,通过“总结篇”带你复习巩固。

设计模式与范式部分,将精讲23种经典设计模式,帮你搞懂每一种设计模式的原理、核心思想和应用场景,并告诉你如何避免过度设计和设计不足,一次性彻底掌握设计模式相关的所有知识。

开源与项目实战部分,将带你剖析6个常用开源框架用到的设计模式、原则和思想,并通过完整的分析、设计和实现过程,手把手带你完成4个实战项目,将学过的理论知识应用到实战中。

加餐部分,将随专栏进度不定期进行更新。这一部分将和你分享作者十多年工作中总结出的学习方法、工作心得和人生经验。

三、需要什么基础?

1.专栏中的代码是用 Java 语言实现的,但是专栏内容的讲解并不与具体的编程语言挂钩。只要你熟悉一门编程语言即可。

2.专栏重点面向偏后端的程序员,有一定项目经验会更好,没有也完全没有关系。

限时福利