设计模式学习笔记 - 回顾总结:如何将设计思想、原则、模式等理论知识应用到项目中?

概述

上篇文章,我们第整个专栏的理论知识点做了串讲,不知道你掌握的如何?对于上节课总结的重点内容,希望你能多花点时间搞透彻,对于一些不那么重要的内容,你可以把它们当做资料,用到的时候随手查询,再深入学习。

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


吃透理论、先把书读厚再把书读薄

把理论知识灵活地应用到实践的前提是,对理论有透彻的理解。如果对理论知识掌握得似懂非懂,在实际软件开发中,可以照葫芦画瓢去解决,但是,如果问题背景稍微改变,就会比较难联想到对应的理论知识,更难灵活地应用理论去解决。

要透彻理解专栏中的知识点,一个是要多看几遍,二是要有死磕的精神。虽然这两个方法看起来没有什么高大上的,但是它们确是很有用。

书读百遍其义自见。有时候,对某个知识点,如果看一遍不懂,就硬着头皮多看几遍,或者隔几天回过头来再看一遍,你会发现原来很多不懂的地方,自然而然就懂了。

**慢就是快,快就是慢。**专栏涉及的内容很多,但我们花一年的事件把所有的知识点学透彻,实际上是一件一劳永逸的事情。这个过程虽然看似漫长,但收益却很多。对此而言,如果你只是为了追求结果速度,花一两个月、甚至一两个礼拜,把课程学完。这看似很快,但实际上收获会很少。

**先把书读厚,在把书读薄。**反复地学,持续的看。先把书读厚,等到你把所有的知识点都理解透彻,并且在脑子里建立起清晰的知识体系之后,你会发现,实际上专栏就那么点东西,并不难记忆。前提是你先要花时间把书读厚,然后才能做到把书读薄。

虽然这里这里讲到书读百遍其义自见,也讲到死磕精神,但是有时候,对于某个知识点,我们看了很多遍、死磕了很长时间,还是没法透彻理解,这个时候也不要过于钻牛角尖,非得 “现在立刻马上就要” 把它拿下。可以先把这个知识点放一放,先看看后面的内容,隔一段事件,让只是沉淀、消化一下,再回过头来看也是可以的。

在实际中反复学习、模仿和借鉴

很多人说,理论的知识学了就忘了,忘了是不是就等于白学?实际上不是的,起码对于这个专栏的内容来说,并非如此。在专栏中,几乎每个知识点,都结合具体的案例和代码来讲解,目的就是为了让你在实战中学习。所以,你学习的重点不是理论知识,而是跟随思维逻辑,学习如何分析代码问题,解决代码问题。通过专栏,经过上百个代码案例的剖析学习,即便理论知识你可能会忘记,但这种潜移默化的能力锻炼,是不会丢掉的。

对于新手来说,最好的学习方法之一就是 “模仿”。你可以先从 “照抄” 开始,把所有的代码都抄一遍,然后再慢慢过渡到自己去默写。

对应本专栏来说,如果你项目经验不多,要向把理论一下子就灵活应用到项目中,实际上这个要求就有点过高了。通用,你也可以先从模仿开始,对于项目中遇到的跟专栏中相似的开发场景,就可以借鉴专栏中的设计思路、代码实现。实际上,除了专栏的案例外,还有很多借鉴的来源,比如我们前面剖析过的经典开源项目(Spring、Mybatis),还有项目中大牛同事写的代码等。

有人为了刷 LeetCode、刷算法题,会积累一些算法模板,对于相似的问题,套用算法模板来快速解决。通用的,我们也可以积累设计模板、代码模板,对于相似的功能需求,可以套路设计模板、代码模板来解决。比如,在前面讲到的限流框架、灰度组件中,加载配置文件这样一个常用的功能设计和实现,我们就可以抽象成模板。对于其他项目中类似的功能需求,直接套用就可以,不用从零开始设计和实现了。

刻意思考、刻意训练、追求极致

要想把理论知识应用到项目中,并且做到润物细无声、融会贯通、无招胜有招,需要经过漫长的刻意思考和刻意联系。

拿到一个功能需求时,我们先去思考一下如何设计,而不是上来就写代码。写代码时,也要时刻思考代码设否遵循了经典的设计思想、设计原则,比如是否足够可扩展、是否满足 SOLID 原则、可读性如何等等

写完代码之后,我们再思考一下,代码是否有进一步优化的空间做 Code Review 时,看到别人优秀的代码,我们就要去思考一下,有哪些值得借鉴的地方

总之,在平时的开发中,我们要刻意的去做这种跟代码质量、代码设计相关的思考训练。时间长了,这种思路就能成为习惯和本能反应,慢慢地,你的代码能力也就不自觉地提高了。

刻意训练的过程在前期会比较痛苦。为了尽可能写出高质量的代码,为了刻意训练在代码中应用理论知识,原本半天就能写好的代码,可能需要好几天才能完成。在最开始时,我建议你把专栏中讲到的经典设计思想、原则、模式,打印出来贴在电脑旁,每次写代码时,对照着每个知识点,一个一个去审视代码。

跟前面讲到的花很多时间把理论知识搞透彻的道理一样,刻意训练虽然在前期需要投入跟多的时间和精力,但也是一件一劳永逸的事情。等到训练到一定程度后,你会发现,在不依赖这个知识点列表的情况下,你开始不自主得考虑代码质量问题、设计问题,不经意写出的代码,就完全符合高质量代码的要求,而且,写出的好代码并不会花费更多的时间了。相反,如果不愿意为刻意训练付出时间和精力,每次写代码都马马虎虎,代码质量永远都提高不了,也永远达不到灵活应用理论知识到项目中。

多花点心思和时间把一段代码写好、优化到极致,比写十段凑活能用的代码,对提高代码能力更有效。实际上,这就好比刷 LeetCode 算法题,对于一些经典算法的经典题目,我们一定要刻意地多花点时间搞清楚,死磕一下。虽然死磕的过程很痛苦,可能会花点你很多时间,但一旦搞明白之后,其他类似的题目都可以解决。相反,如果看到不会的问题,连思考都不思考,就去看答案,那做十道题,也还是没有太多长进,看到题目不看答案还是写不出来。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/600110.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

后仿真中的关于延时问题(物理特性角度)

大家都知道,后仿真讲究仿真时序。那么,在网表阶段,接触到后仿延时问题。今天总结一下。 一 延时概念和分类 1.1 分布式延迟(Distributed Delays) 一般用来指定模块内部信号通过逻辑单元或者线网耗费的时间。 1.2 模…

Linux进程通信-信号

信号概念 信号是 Linux 进程间通信的最古老的方式之一,是事件发生时对进程的通知机制,有时也称之为软件中断,它是在软件层次上对中断机制的一种模拟,是一种异步通信的方式。信号 可以导致一个正在运行的进程被另一个正在运行的异…

STM32——基础篇

技术笔记! 一、初识STM32 1.1 ARM内核系列 A 系列:Application缩写。高性能应用,比如:手机、电脑、电视等。 R 系列:Real-time缩写。实时性强,汽车电子、军工、无线基带等。 M 系列:Microcont…

资料总结分享:SAM,bam,bed文件格式

目录 sam文件 bam文件 bed 文件 sam文件 SAM(Sequence Alignment/Map)文件是存储测序数据比对结果的一种常见格式。SAM文件通常用于存储DNA或RNA测序数据在参考基因组上的比对结果。 SAM文件由多行文本组成,每一行代表一个比对结果。SAM文…

nginx 负载均衡、反向代理实验

nginx 负载均衡、反向代理实验 实验目的 理解概念:明确反向代理和负载均衡的基本概念及其在网络架构中的作用。 掌握技能:学习如何配置Nginx以实现反向代理和负载均衡功能。 实践应用:通过实际操作,体验Nginx如何提升Web服务的可…

不上班,我靠这5份赚钱副业养活了自己

在这个快节奏的社会里,很多人都在为生活奔波忙碌。今天,就让我来跟大家分享一下我的“躺平”秘籍吧! 这一个月来,我没有上班,但好在有副业养活自己。有时候,我真的觉得有一份自己喜欢的自媒体副业挺好的。…

PE文件(四)FileBuffer-ImageBuffer作业

C语言实现如下功能 2.编写一个函数,将RVA的值转换成FOA 将文件加载到内存时,已知一个数据在内存中的地址,将此地址转化成文件在硬盘上时的相对于文件起始地址的文件偏移地址。即将虚拟内存偏移地址转换成文件偏移地址。 说明:这里…

div组件作为按钮点击时显示小手样式

最近开发的时候发现用div来做按钮比直接使用el-button方便很多&#xff0c;调整样式也方便&#xff0c;但是如果直接使用div做按钮&#xff0c;鼠标放上面时只显示一个竖着的光标&#xff0c;很不美观&#xff0c;并且不会让用户知道可以点击 <template><div class&qu…

栈数据结构

1,概念 栈&#xff1a;一种特殊的线性表&#xff0c;其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈 顶&#xff0c;另一端称为栈底。栈中的数据元素遵守后进先出LIFO&#xff08;Last In First Out&#xff09;的原则。 压栈(push)&#x…

VS Code中PlatformIO IDE的安装并开发Arduino

VS Code中PlatformIO IDE的安装并开发Arduino VS Code的安装 略 PlatformIO IDE的安装 PlatformIO IDE是是什么 PlatformIO IDE 是一个基于开源的跨平台集成开发环境&#xff08;IDE&#xff09;&#xff0c;专门用于嵌入式系统和物联网&#xff08;IoT&#xff09;开发。…

Mybatis-Plus大批量插入数据到MySQL

MyBatis-Plus的saveBatch方法 GetMapping("/save1") public void save1() {// 数据准备List<MallOrder> orderList getMallOrderList();// mybatis-pluslong start System.currentTimeMillis();mallOrderService.saveBatch(orderList);System.out.println(&…

【Linux】HTTPS

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;折纸花满衣 &#x1f3e0;个人专栏&#xff1a;Linux 目录 &#x1f449;&#x1f3fb;HTTPS协议概念&#x1f449;&#x1f3fb;加密为什么要进行加密 &#x1f449;&#x1f3fb;常见的加密方式对称加密…

Backblaze发布2024 Q1硬盘故障质量报告-1

作为一家在2021年在美国纳斯达克上市的云端备份公司&#xff0c;Backblaze一直保持着对外定期发布HDD和SSD的故障率稳定性质量报告&#xff0c;给大家提供了一份真实应用场景下的稳定性分析参考数据。 截至2024年第一季度末&#xff0c;Backblaze在其全球数据中心的云存储服务器…

15.计算机网络

1.物理层的互联设备 中继器 和 集线器 2.集线器可以看做特殊的多路中继器 集线器 不可以做到自动寻址的功能 3.数据链路层 网桥 和 交换机 4.交换机是多端口网桥 5.网络层 路由器 6.应用层 网关 7.广播域 网络层 可以形成多个广播域 冲突域 网络层数据链路层 可以形成多个冲突域…

Codeforces Round 942 (Div. 2) A-D1

题目&#xff1a; Codeforces Round 942 (Div. 2) D2有缘再补吧… A. Contest Proposal 题意 两个升序&#xff08;不降&#xff09;的序列a和b&#xff0c;可以在a的任意位置插入任意数&#xff08;要保持升序&#xff09;&#xff0c;使对任意i&#xff0c;有a[i] < b[…

shell脚本编写-测试同一网段内主机是否在线

除了可以使用ansible自动化运维工具判断主机是否在线以外&#xff0c;还可以通过编写Shell脚本来实现。 1、编写脚本 #! /bin/bash #测试192.168.81.0/24网段中哪些主机处于开机状态&#xff0c;哪些主机处于关机状态# #方法一&#xff1a;使用for循环判断 # for i in {1..25…

红海云OA存在任意文件上传漏洞【附poc】

漏洞复现 1、fofa poc见文末 body"RedseaPlatform" 打开burp进行抓包发送到repeater&#xff0c;如下图所示&#xff1a; 打入poc&#xff08;文末获取&#xff09;&#xff0c;成功上传。 「你即将失去如下所有学习变强机会」 学习效率低&#xff0c;学不到实战内…

聊聊 ASP.NET Core 中间件(三):如何创建自己的中间件?

前言 本质上&#xff0c;中间件类也是一个普通的 .NET 类&#xff0c;它不需要继承任何父类或者实现任何接口。 但是有几个约定&#xff1a; 需要有一个构造方法构造方法至少要有一个 RequestDelegate 类型的参数&#xff0c;用来指向下一个中间件。需要定义一个名字为 Invo…

后仿中必须读懂的User-defined primitives(UDP)

一 UDP定义规则 UDP&#xff0c;全名&#xff1a;User-defined primitives。 用户自己定义的原语。 UDP可分为&#xff1a;combinational UDP&#xff08;组合逻辑&#xff09;和 sequential UDP&#xff08;时序逻辑&#xff09;。 1.1 组合逻辑UDP combinational UDP用于…

软件系统测试方案书(测试计划-Word原件)

2 引言 2.1 编写目的 2.3 测试人员 2.4 项目背景 2.5 测试目标 2.6 简写和缩略词 2.7 参考资料 2.8 测试提交文档 2.9 测试进度 3 测试环境 3.1 软硬件环境 4 测试工具 5 测试策略 5.1 测试阶段划分及内容 5.1.1 集成测试 5.1.2 系统测试 5.1.2.1 功能测试 5.…
最新文章