《设计模式之美》- 总结

《设计模式之美》- 总结

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


第一章 概述

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.hqwc.cn/news/635963.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SQLite FTS3 和 FTS4 扩展(三十二)

返回:SQLite—系列文章目录 上一篇:SQLite 的命令行 Shell(三十一) 下一篇:SQLite—系列文章目录 概述 FTS3 和 FTS4 是 SQLite 虚拟表模块,允许用户执行 对一组文档进行全文搜索。最常见(和最有效…

「51媒体」新闻媒体邀约如何进行媒体宣传(方法)

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 新闻媒体邀约进行媒体宣传是一个策略性的过程,旨在吸引媒体的注意力并促使其对特定事件、产品发布或企业活动进行报道。以下是一些关键步骤和策略: 制定媒体传播方…

人工智能论文GPT-3(2):2020.5 Language Models are Few-Shot Learners;微调;少样本Few-Shot (FS)

2 方法Approach 我们的基本预训练方法,包括模型、数据和训练,与GPT-2中描述的过程相似,只是模型规模、数据集规模和多样性,以及训练时长有所扩大,相对简单直接。 我们使用的上下文学习也与GPT-2相似,但在…

黑马鸿蒙学习5:LIST容器

LIST容器,其实就是如果FOREACH容器展示不全的话,会自动有滚动条了。要注意的是,LIST中必须有固定的listitem这个项,而且列表里面只能包含一个根组件。 必须把ROW容器放到listitem中,如下:

c++补充

构造函数、析构函数 #include <iostream> using namespace std;// 构造函数、析构函数 // --- "构造函数"类比生活中的"出厂设置" --- // --- "析构函数"类比生活中的"销毁设置" --- // 如果我们不写这两种函数&#xff0c;编译…

layui框架实战案例(27):弹出二次验证

HTML容器 <button class"layui-btn layui-btn-sm layui-btn-danger" lay-event"delete"><i class"layui-icon layui-icon-delete"></i>批量删除</button>删除封装函数 function delAll(school_id, school_name) {var lo…

开源贡献代码之​探索一下CPython

探索一下Cython 本篇文章将会围绕最近给Apache提的一个feature为背景&#xff0c;展开讲讲CPython遇到的问题&#xff0c;以及尝试自己从0写一个库出来&#xff0c;代码也已经放星球了&#xff0c;感兴趣的同学可以去下载学习。 0.背景 最近在给apache arrow提的一个feature因为…

zabbix自定义监控、自动发现和注册以及代理设置

前言 监控项的定制和新设备的注册往往需要大量手动操作&#xff0c;这会导致维护成本的增加和监控效率的降低。本文将介绍如何利用 Zabbix 的自定义功能&#xff0c;实现监控项的动态发布和新设备的自动注册以及代理设置、从而简化运维工作并实现更高效的监控管理。 Zabbix 监…

通义千问 Qwen-14B 模型微调实战案例及经验总结

节前&#xff0c;我们星球组织了一场算法岗技术&面试讨论会&#xff0c;邀请了一些互联网大厂朋友、参加社招和校招面试的同学&#xff0c;针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总…

网络安全产品---数据库防火墙/审计

数据库防火墙 防火墙的类型繁多&#xff0c;即使下一代防火墙或者说AI防火墙集成功能再多&#xff0c;我觉得waf与数据库防火墙也有其无法被替代的理由&#xff0c;以此记录我对数据库防火墙的理解 what 数据库防火墙是基于数据库协议分析与访问行为控制的数据库安全防护产品…

安居水站:独立审慎的批判思考-审辩式思维

正文共:2492字 15张图 预计阅读时间:5分钟 在设计这个教案时&#xff0c;我们的目标是培养出具有独立思考、逻辑思维和批判性分析能力的学生。这些技能是当今社会日益重视的&#xff0c;也是当前教育体系中学生所普遍缺乏的。为此&#xff0c;我们的教案将通过一系列的活…

在PostgreSQL中如何进行全文搜索,以及如何优化全文搜索性能?

文章目录 如何进行全文搜索1. 创建全文搜索向量2. 执行全文搜索查询 如何优化全文搜索性能1. 使用GIN索引2. 限制搜索范围3. 优化文本处理4. 使用并发搜索5. 监控和调整配置 在PostgreSQL中&#xff0c;全文搜索通常通过使用tsvector和tsquery类型&#xff0c;以及to_tsvector和…