《洞察设计模式的底层逻辑》读后感

简介: 《洞察设计模式的底层逻辑》读后感

原文:https://mp.weixin.qq.com/s/qRjn_4xZdmuUPQFoWMBQ4Q


学以致用

文中提到:

  • 设计模式的底层逻辑是:“找到变化,封装变化”。设计模式的基石是面向对象。
  • 学习设计模式的目的不是画出各种设计模式的类图,而是要学习它的思维:找到变化,封装变化。
  • 设计模式还是要应用到实际的业务中才能发挥它的价值

短短几句话,却句句珠玑。


再延展来讲,学习的目的在于学以致用而不在于理论本身,此外我们学习一些技术时更重要的是学习其核心的原理而不是形式。


就像我们不能盲目的追逐技术本身,而是要用技术来解决问题,从而创造价值。


想做到学以致用,我们要完成思维的转变,克服原有以记忆或者热衷技术本身的惯性思维和学习方式,学技术时了解场景,熟悉优缺点,懂得某些技术的核心原理,甚至抽象出最本质的目的。


归纳和演绎法

文中提到归纳法和演绎法,这一点深有感触。

我们看到的很多文章更多地是在传递信息,而只有经过抽象和归纳过的精华才叫知识。


之前就对性能优化这一块通过归纳法进行学习,得到一些自己的思考。

如:

  • 性能优化是为了:解决追求良好的用户体验和有限资源之间的矛盾。
  • 性能优化的核心思路: 开源和节流外加限制,即使用更多的资源,减少不必要的浪费,此外加一些限制条件

性能优化常见的一些方法:同步转异步、串行转并行、空间换时间(缓存、预热等)、压缩、对象池模式、减少上下文切换、减少IO操作、降低冲突的范围、随机读写转顺序读写、选择适合的数据结构、产品层面加限制等都符合上述核心思路。

演绎法也非常重要,我们学习知识不在于死记硬背,而在于学以致用,所谓的学以致用更多地讲内化和知识的迁移运用能力。

如我们归纳了性能优化的一些思路,再反向再去理解 MySQL、HBase 中一些性能优化的设计背后的原因就会容易很多,平时做技术方案如果考虑性能优化的话也更容易信手拈来。



知其所以然

之前也读了很多书,总是读完就忘,或者单纯问能够答出来,但是实际工作生活中却理论和实践的脱节,无法灵活运用。

现在读书思路有些转变,主要去思考为什么这么设计,这么设计带来什么好处等,能能够从书中得到自己认为最核心的思想,等开发中遇到类似的场景就更容易提取和使用。


跳出惯性思维,以终为始

文中提到的一种现象自己深有感触:“平时我们在做业务需求开发时,要有这种识别变化的意识,先不要陷入面向过程的思维中,不要一上来就考虑如何去实现,而是思考它是什么,会有哪些变化”。

想到工作中之前一个 TL 讲到:我发现很多人就是需求翻译机器,拿到项目之后就去设计表,而不是思考价值、目的,不去思考领域。


越来越多的人记住了解决办法,却忽略了做某些事情的目的,某些技术的本质。

而且工作过程中越来越发现,越是优秀的老员工,越是有很好的抽象能力,全局视野;越是职级高的同事,越能够从全局去思考和看问题。


抓住问题的核心,以终为始,从更抽象和全局的视角看待问题,才能容易真正掌握住变化。


简一律

文中提到店铺类目设计的案例,不同方案的权衡依据总结的非常好:能简单就不要搞复杂,用简单的技术方案实现就不要用复杂的技术方案。

同时衡量一个人是否真正理解一个知识点的标准也是能否用通俗易懂的语言表达出来。


这也就是所谓的“大道至简”。


面向未来编程

工作编码过程中,我们通常会面向失败编程,考虑参数合法性,考虑各种异常场景。

在这里还要提到面向未来编程,所谓的面向未来编程是指针对未来可能的变化事先做出一些准备。



所谓的发现变化,封装变化,某种程度上来说就是面向未来编程。

如果未来一定不会发生变化,那么费劲地去发现变化,去封装变化为了啥呢?

因此封装变化就是为了在我们预测到的变化地方发生了变化时,能够减少工作量,降低复杂度等。



和“人无远虑必有近忧”、“未雨绸缪” 讲得道理都是一致的。


读经典

文中关键的依据都引用自一些经典的图书或者软件领域的理论。(这本身就是对这篇文章作为一个案例的抽象)


比如设计模式一书中提到“找到变化,封装变化”。


我们要做的是学习作者学习的模式。


比如我们读“任何计算机科学领域的问题都可以通过增加一个间接的中间层来解决”。


那么我们再看各种缓存机制,两阶段提交、分布式协调组件、分库分表中间件、消息队列、领域驱动设计等这些看似完全不想干的概念却有着莫名的内在联系,他们其实都是通过增加中间层来解决各种问题。


如通过增加缓存,解决对读的速度要求;通过消息队列实现削峰、解耦;通过增加协调者,实现分布式事务;通过添加领域层隔离变化实现更好的内聚性;通过新增代理层,解决分库分表的复杂度。


通过这种方式我们可以从更抽象的层次来看到不同技术之间的联系,更容易理解和认同一些经典理论的说法。









相关文章
|
设计模式 算法 Java
设计模式第十五讲:重构 - 改善既有代码的设计(下)
设计模式第十五讲:重构 - 改善既有代码的设计
310 0
|
4月前
|
设计模式 存储 算法
《设计模式:可复用面向对象软件的基础(典藏版)》
本书是埃里克·伽玛著作,涵盖180个笔记,主要介绍面向对象设计模式,包括MVC、设计模式编目、组织编目、实现描述、复用机制、运行时与编译时结构关联、设计支持变化等方面。书中详细解释了23种设计模式,如Abstract Factory、Adapter、Bridge、Builder等,按创建型、结构型、行为型分类,旨在提高软件可复用性和灵活性。
265 0
《设计模式:可复用面向对象软件的基础(典藏版)》
|
5月前
|
设计模式 项目管理
设计模式的基础问题之生成器模式在项目管理应用的问题如何解决
设计模式的基础问题之生成器模式在项目管理应用的问题如何解决
|
5月前
|
设计模式 Java
设计模式问题之设计模式想要跟随业务演进,如何实现
设计模式问题之设计模式想要跟随业务演进,如何实现
|
缓存 搜索推荐 前端开发
项目实战典型案例21——面向对象复用、面向对象实现、立体化权限落地
项目实战典型案例21——面向对象复用、面向对象实现、立体化权限落地
90 0
|
设计模式
设计模式——单一职责模式之桥模式
在软件组件的设计中,如果责任划分的不清晰,使用继承得到的结果往往是随着需求的变化,子类急剧膨胀,同时充斥着重复代码,这时候的关键是划清责任。
99 0
|
8月前
|
设计模式
二十三种设计模式全面解析-抽象工厂模式:创造无限可能的工厂之道
二十三种设计模式全面解析-抽象工厂模式:创造无限可能的工厂之道
|
8月前
|
设计模式 存储 自然语言处理
Java面向对象设计七大原则
Java面向对象设计七大原则
125 0
|
设计模式 Java 测试技术
设计模式第十五讲:重构 - 改善既有代码的设计(上)
设计模式第十五讲:重构 - 改善既有代码的设计
345 0
|
设计模式 Java
深入理解设计模式!六大设计原则的分析与介绍
本篇文章开始介绍程序架构设计中的设计模式,介绍了设计模式的基本概念以及23设计模式。主要介绍了设计模式中的六大设计原则。开闭原则,里氏代换原则,依赖倒转原则,接口隔离原则,迪米特原则和合成复用原则。这几大原则是设计模式使用的基础,在使用设计模式时,应该牢记这六大原则。
6086 0
深入理解设计模式!六大设计原则的分析与介绍

热门文章

最新文章