《设计模式之美》第一章 总结

embedded/2024/10/21 10:18:20/

设计模式之美》第一章 总结

代码质量评判标准以及实现工具


第一章 概述

1.1 为什么学习代码设计

  1. 编写高质量的代码
  2. 应对复杂代码的开发
  3. 程序员的基本功
  4. 职业发展的必备技能

1.2 如何评价代码的质量

1.2.1 可维护性
可维护性代码的特性:代码简洁、可读性好、可扩展性好代码分层结构清晰、模块化程度高、高内聚低耦合、遵守基于接口而非实现编程的设计原则等还有跟项目的代码量、业务的复杂度、技术的复杂度、文档的全面性和团队成员的开发水平等因素有关
1.2.2 可读性
可读性的评判标准代码是否符合代码规范,比如命名是否达意、注释是否详尽、函数长度是否合适、模块划分是否清晰、代码是否高内聚、低耦合
1.2.3 可扩展性
评判标准指的是在不修改或少量修改原有代码的情况下,能够通过扩展方式添加新功能代码。是指在编写代码时预留了一些功能扩展点,可以把新功能直接插入扩展点,而不会因为添加新的功能代码而改动大量的原始代码。
1.2.4 灵活性
评判标准代码易扩展、易复用、或者易用,一般认为这段代码写的很灵活。
1.2.5 简洁性
简洁、清晰是写代码的首要原则,思从深而行从简,编程高手往往能用简单的方法解决复杂的问题。	
需要遵循KISS原则
1.2.6 可复用性
含义:尽量减少重复代码的编写,复用已有的代码继承、多态的目的之一是提高代码的复用性;单一职责原则与代码的复用性相关;解耦、高内聚和模块化等能提高代码的可复用性;是很多设计原则、设计思想和设计模式等所要实现的最终效果;
1.2.7 可测试性
代码的可测试性低,难以编写单元测试;

1.3 如何编写高质量代码

1.3.1 面向对象设计范式
四大特性:封装、抽象、继承、多态
面向对象和面向过程的区别
面向对象分析、面向对象设计、面向对象编程
接口和抽象类的区别,以及各自的应用场景
基于接口编程而非基于实现编程
多用组合、少用继承
面向过程的‘贫血’模型、面向对象的‘充血’模型
1.3.2 设计原则
设计原则是心法、设计模式是招式;
设计原则比设计模式普适、重要;
只有掌握了设计原则,才能清楚地了解为什么使用某种设计模式,并且恰到好处地应用设计模式,甚至可以创造新的设计模式;
九种原则:1、单一职责原则(SRP);2、开闭原则(OCP);3、里氏替换原则(LSP);4、接口隔离原则(ISP);5、依赖反转原则(DIP);6、KISS原则7、YAGNI原则8、DRY原则9、LoD原则
1.3.3 设计模式
大部分设计模式解决的是代码的解耦、可扩展性的问题;
重点需要掌握可以解决什么问题、典型的应用场景,并且不过度使用;
分三类:创建型、结构型、行为型;
学习设计原则和设计规范,需要融入很多的个人理解和思考;
1.3.4 代码规范
主要解决代码的可读性问题;
命名规范、注释规范等;
1.3.5 重构技巧
代码重构的工具:面向对象的编程范式、设计原则、设计模式、代码规范;
1、重构的目的、对象、时机、方法;
2、保证重构不出错的手段:单元测试、以及代码的可测试性;
3、大重构(大规模、高层次)、小重构(小规模、低层次);

面向对象编程、设计原则、设计模式、代码规范和重构技巧之间的关系

1、面向对象因其丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,所以,它是很多设计原则、设计模式编程实现的基础;
2、设计原则是指导代码设计的一些经验总结,是代码设计的心法,指明了代码设计的大方向。相比设计模式,它更普适;
3、设计模式是针对软件开发中经常遇到的一些设计问题二总结的一套解决方案或设计思路。应用设计模式的主要目的是解耦,提高代码的可扩展性。从抽象角度上来讲,设计原则比设计模式更抽象。设计模式更加具体,更加容易落地执行。
4、代码规范解决的是代码的可读性问题,更加具体、更加偏重代码细节和更加容易落地执行。持续小重构的理论依据就是代码规范。
5、重构是保持代码质量不下降的有效手段,依靠的是面向对象编程范式、设计原则、设计模式、代码规范。总结:
1、面向对象编程范式、设计原则、设计模式、代码规范、重构是保持或提高代码质量的方法论、指导思想,本质上都是服务于编写高质量代码。
2、如何才能熟练掌握以上方法:掌握理论知识、刻意的训练,最重要的是具备代码质量意识。
3、代码设计的方法:多思考未来有哪些扩展需求、哪部分代码是会变的、哪部分代码是不变的;

1.4 如何避免过度设计

1.4.1 初衷:提高代码质量
思考点:
为什么要这样设计、为什么要用这种设计模式、这样做是否能真正提高代码质量、能够提高代码哪些方面的质量;
如果回答不了上面的问题,基本上就是过度设计。
1.4.2 原则:先有问题,后有方案
分析代码现有问题的方法:
1、分析代码存在的痛点:比如可读性不高、可扩展性不高等;
2、有针对性地利用设计模式、设计原则对代码进行改善,不可随意套用;
1.4.3 代码设计的应用场景是复杂代码
应用设计模式的目的是解耦,解耦的目的是应对代码的复杂性问题。代码不复杂就没必要引入设计模式。
数据结构和算法应对的是大规模数据的问题。
1.4.持续重构可有效避免过度设计
设计模式可以提高代码的可扩展性,但是会降低代码的可读性;
持续重构,当有真正的痛点时,再考虑使用设计模式来解决,而不是一开始就为不一定实现的未来需求而应用设计模式;
在模棱两可时先不使用设计模式,当代码持续演进到足够复杂,如果不适用它就需要改动很多代码,这时才可以使用它;
能不用就不用,遵循KISS原则;
1.4.5 不要脱离具体的场景谈代码设计
脱离业务谈架构是不切实际的;
要重视分析问题能力和解决问题能力的锻炼;
能够分析代码的优秀之处和不足之处,并说明原因,以及要知道如何改善代码;

http://www.ppmy.cn/embedded/6558.html

相关文章

信道的题目

调制信道分为恒参信道和随参信道。恒参信道举例:各种有线信道;中长波地波传播、卫星中继。随参信道举例:短波电离层反射信道、各种散射信道、移动通信信道。狭义信道分为有线信道和无线信道。广义信道包含调制信道和编码信道。调制信道中不包…

java怎么创建字符串数组(java创建一个string数组)

java中如何创建字符串数组? 字符串数组的创建:String a new String(Java);不过推荐用ArrayList strArray new ArrayList (); 比较灵活。 String[][] snew String[60][3];这和60个数组是一样的,编程不能太死了。 例…

iOS重签名-超详细,附排错

文章目录 重签名步骤步骤 1: 准备必要的材料步骤 2: 解压 .ipa 文件步骤3:将 Provisioning Profile 复制到 Payload 目录步骤 4: 移除原来的签名步骤 5: 使用新的证书和 Provisioning Profile 进行重签名步骤 6: 重新打包 .ipa 文件步骤 7: 安装和测试得到provisioning file和…

【Cookie,Session,Token,JWT的区别】

一、Cookie Cookie 是在 HTTP 协议下,维护客户工作站上信息的一种方式。Cookie 是由 Web 服务器保存在用户浏览器上的小文本数据文件,它可以包含有关用户的信息。cookie是不可跨域的,每个cookie都会绑定一个单一的域名,并只能在指…

08.MySQL大小写

MySQL大小写 1.默认情况 windows:啥都不区分大小写linux: 数据库名、表名、表的别名、变量名是严格区分大小写的关键字、函数名称在 SQL 中不区分大小写列名(或字段名)与列的别名(或字段别名)在所有的情况…

12.事件参数

事件参数 事件参数可以获取event对象和通过事件传递数据 获取event对象 <template><button click"addCount">Add</button><p>Count is: {{ count }}</p> </template> <script> export default {data() {return {count:0…

Word学习笔记之奇偶页的页眉与页码设置

1. 常用格式 在毕业论文中&#xff0c;往往有一下要求&#xff1a; 奇数页右下角显示、偶数页左下角显示奇数页眉为每章标题、偶数页眉为论文标题 2. 问题解决 2.1 前期准备 首先&#xff0c;不论时要求 1、还是要求 2&#xff0c;这里我们都要做一下设置&#xff1a; 鼠…

音视频封装格式解析(1)——H264格式简析,I/P/B帧是什么?H264压缩原理

文章目录 1. H264编码参数2. H264编码原理2.1 压缩原理2.2 编码结构解析 3. NALU结构4. H264 annexb模式5. 补充说明5.1 I帧5.2 P帧5.3 B帧 1. H264编码参数 视频质量和⽹络带宽占⽤是相⽭盾的。通常情况下&#xff0c;视频流占⽤的带宽越⾼则视频质量也越⾼&#xff0c;需要的…