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

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

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


学以致用

文中提到:

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

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


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


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


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


归纳和演绎法

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

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


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

如:

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

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

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

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



知其所以然

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

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


跳出惯性思维,以终为始

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

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


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

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


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


简一律

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

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


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


面向未来编程

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

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



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

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

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



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


读经典

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


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


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


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


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


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


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









相关文章
|
消息中间件 负载均衡 网络协议
ActiveMQ详细配置方案
本文总结ActiveMQ重要的一些配置,包括高可用failover配置、消息策略等。
1105 0
|
12月前
|
存储 NoSQL Java
分布式session-SpringSession的应用
Spring Session 提供了一种创建和管理 Servlet HttpSession 的方案,默认使用外置 Redis 存储 Session 数据,解决了 Session 共享问题。其特性包括:API 及实现用于管理用户会话、以应用容器中性方式替换 HttpSession、简化集群会话支持、管理单个浏览器实例中的多个用户会话以及通过 headers 提供会话 ID 以使用 RESTful API。Spring Session 通过 SessionRepositoryFilter 实现,拦截请求并转换 request 和 response 对象,从而实现 Session 的创建与管理。
278 0
分布式session-SpringSession的应用
|
安全 物联网 Linux
学习Linux对网络安全的重要性
**学习Linux对网络安全至关重要:** 1. 开源操作系统广泛应用于服务器、网络设备,掌握Linux是安全专家必备技能。 2. Linux内置安全特性,如最小权限和防火墙,加上丰富的安全工具,提供强大保障。 3. 可定制性允许灵活配置,满足安全需求,开源社区提供持续更新和教育资源。 4. 学习Linux能提升攻防能力,用于系统加固和渗透测试,适应跨平台安全场景。 5. 随着云计算和物联网发展,Linux在网络安全中的角色日益关键。
295 3
|
easyexcel Java API
Apache POI、EasyPoi、EasyExcel 三种区别,如何选择
Apache POI、EasyPoi、EasyExcel 三种区别,如何选择
1835 0
|
存储 程序员 数据处理
C语言中的结构体:深入解析与应用
C语言中的结构体:深入解析与应用
188 0
|
Web App开发 域名解析 监控
前端可观测性的宣讲-1022
前端可观测性的宣讲-1022
564 0
前端可观测性的宣讲-1022
|
消息中间件 分布式计算 Cloud Native
[实战系列]SelectDB Cloud Datax 数据写入最佳实践
企业正在经历其数据资产的爆炸式增长,这些数据包括批式或流式传输的结构化、半结构化以及非结构化数据,随着海量数据批量导入的场景的增多,企业对于 Data Pipeline 的需求也愈加复杂。新一代云原生实时数仓 SelectDB Cloud 作为一款运行于多云之上的云原生实时数据仓库,致力于通过开箱即用的能力为客户带来简单快速的数仓体验。在生态方面,SelectDB Cloud 提供了丰富的数据连接器插件(Connector)来连接各种来自周边大数据工具的数据源,内置 Kafka、Flink、Spark、DataX 等常见的 Connector。基于此,企业开发者能够更加便捷的将数据移动到 Se
417 0
|
算法 搜索推荐
数据结构(2)时间复杂度——渐进时间复杂度、渐进上界、渐进下界
2.1.概述 算法的基本定义: 求解问题的一系列计算或者操作。 衡量算法性能的指标: 时间复杂性 空间复杂性
1226 0
|
SQL Oracle 关系型数据库
在plsql , sql语句中带有中文的查询条件查询不到数据
在plsql , sql语句中带有中文的查询条件查询不到数据
659 0
在plsql , sql语句中带有中文的查询条件查询不到数据