《设计模式之美》- 总结

news2024/11/15 11:29:30

《设计模式之美》- 总结

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


第一章 概述

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.coloradmin.cn/o/1611621.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Spring Boot + Thymeleaf 实现的任务发布网站

角色: 管理员雇主雇员 功能 雇主:登录、注册、发布任务、选择中标雇员、评价雇员雇员:登录、注册、查看任务列表、投标任务、收藏任务、完成任务管理员、登录、任务管理、雇主管理、雇员管理 部分功能截图 部署 导入数据库…

【剪映专业版】13快速为视频配好音:清晰、无噪声、对齐

视频课程:B站有知公开课【剪映电脑版教程】 使用场景:视频无声音或者视频有声音但是需要更改声音 时间指示器在哪里,就从哪里开始 红色按钮:开始录音 声音波纹:蓝色最佳,黄色或红色声音太大,…

【Django】学习笔记

文章目录 [toc]MVC与MTVMVC设计模式MTV设计模式 Django下载Django工程创建与运行创建工程运行工程 子应用创建与注册安装创建子应用注册安装子应用 数据模型ORM框架模型迁移 Admin站点修改语言和时区设置管理员账号密码模型注册显示对象名称模型显示中文App显示中文 视图函数与…

CCIE-16-PIM

目录 实验条件网络拓朴实验环境实验目的 开始实验实验1:PIM-DM配置PIM域中的路由,开启PIM-DM组播路由功能,验证组播情况 实验2:PIM-SM(静态RP)配置PIM域中的路由,开启PIM-SM组播路由功能&#x…

IntelliJ IDEA运行发布传统Java Web Application项目

接 重温8年前项目部署 要求,如何改用IntelliJ IDEA运行发布传统 Java Web Application项目呢,简述步骤如下: 一、下载源码 源码:https://github.com/wysheng/kindergarten 下载后的本地项目路径:/Users/songjianyon…

美容预约小程序:简单三步,开启高效预约模式

在当今的数字化时代,一个小程序可以极大地提高美容院的效率和客户满意度。下面我们将详细说明如何通过以下步骤来搭建一个美容院预约小程序。 首先,你需要注册并登录到乔拓云网,这是 一个在线平台,可以帮助你快速创建并管理你的小…

SpringBoot集成FTP

1.加入核心依赖 <dependency><groupId>commons-net</groupId><artifactId>commons-net</artifactId><version>3.8.0</version></dependency> 完整依赖 <dependencies><dependency><groupId>org.springfra…

(四)SQL面试题(连续登录、近N日留存)学习简要笔记 #CDA学习打卡

目录 一. 连续登录N天的用户数量 1&#xff09;举例题目 2&#xff09;分析思路 3&#xff09;解题步骤 &#xff08;a&#xff09;Step1&#xff1a;选择12月的记录&#xff0c;并根据用户ID和登录日期先去重 &#xff08;b&#xff09;Step2&#xff1a;创建辅助列a_rk…

maven问题汇总

​ 1、报错 failed to transfer from http://0.0.0.0/ during a previous attempt. com.byd.xxx:xxx-parent:pom:1.1.0-SNAPSHOT failed to transfer from http://0.0.0.0/ during a previous attempt. This failure was cached in the local repository and resolution is no…

K8S哲学 - Pod、RC、RS、deployment

pod&#xff08;最小的可部署单元&#xff09; 容器组&#xff08;运行一个或多个容器&#xff09; Pod(容器组&#xff09;是Kubernetes 中最小的可部署单元。 一个Pod(容器组&#xff09;包含了一个应用程序容器&#xff08;某些情况下是多个容器&#xff09;、存储资源、 一…

C++三大特性之一:继承

文章目录 前言一、继承方式二、继承类型继承中构造和析构的顺序继承中的内存分配多继承语法(非重点)继承中同名静态成员的处理继承一般在哪里用到进阶&#xff1a;菱形继承和虚拟继承 总结 前言 C三大特性&#xff1a;继承、多态和封装。继承是面向对象编程的一个核心概念&…

JavaScript【关系与逻辑运算符】

关系运算符 关系运算符用于比较两个值之间的关系&#xff0c;并根据比较结果返回布尔值&#xff08;true或false&#xff09; 源码 relation-operator<script>//关系运算符 > < > < ! !//根据运算符两边值的关系返回true正确或false错误console.log(1&…

SQLite轻量级会话扩展(三十四)

返回&#xff1a;SQLite—系列文章目录 上一篇&#xff1a;SQLite R*Tree 模块&#xff08;三十三&#xff09; 下一篇&#xff1a;SQLite—系列文章目录 1. 引言 会话扩展提供了一种方便记录的机制 对 SQLite 数据库中某些表的部分或全部更改&#xff0c;以及 将这些…

[阅读笔记18][CITING]LARGE LANGUAGE MODELS CREATE CURRICULUM FOR INSTRUCTION TUNING

这篇论文是23年10月提交到arxiv上的&#xff0c;也是用大模型蒸馏小模型的思路。 作者在这篇论文中提出了课程指令微调&#xff0c;大体流程如下图所示&#xff0c;教师模型给出一个问题&#xff0c;让学生模型回答一下&#xff0c;这时候学生回答大概率不够准确&#xff0c;这…

4.2冰达机器人:视觉实例-机器人视觉循线、视觉实例-调整循线颜色

4.2.10a视觉实例-机器人视觉循线 本节内容演示一个机器人视觉的视觉循线实例 准备工作&#xff1a;布置一块区域作为循线场所&#xff0c;如下图所示。用蓝色胶带在地面贴一条路线&#xff08;机器人极限转弯半径0.5m&#xff0c;不要贴得过于曲折&#xff09;&#xff0c;将…

MINIO安装的方法(WindowsLiunx)

2 minio安装教程 注&#xff1a;官方中文文档&#xff1a;MinIO对象存储 Windows — MinIO中文文档 | MinIO Windows中文文档 Liunx 安装方&#xff1a;MinIO对象存储 Linux — MinIO中文文档 | MinIO Linux中文文档 2.1 下载地址 https://dl.min.io/server/minio/…

vlan 和 trunk实验

VLAN&#xff08;Virtual Local Area Network&#xff09;&#xff0c;即虚拟局域网&#xff0c;是一种网络技术&#xff0c;它的主要原理是将物理网络划分为多个逻辑子网&#xff0c;每个子网形成一个独立的广播域。这样&#xff0c;VLAN内的主机间通信就像在同一个局域网内一…

第二届 Oceanbase 开发者大会 实录

第二届 Oceanbase 开发者大会 实录 今天很有幸参加了Oceanbase 开发者大会&#xff0c;我是真的我一开始还不知道什么是Oceanbase &#xff0c;直到我开了会才知道。看来真的需要多参加一些这样活动。 会议议程 我们科普一下什么是Oceanbase OceanBase 是阿里巴巴集团推出…

Junit 高级-ApiHug准备-测试篇-011

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 涉及到 …

MYSQL之增删改查(下)

前言&#xff1a; 以下是MySQL最基本的增删改查语句&#xff0c;很多IT工作者都必须要会的命令&#xff0c;也 是IT行业面试最常考的知识点&#xff0c;由于是入门级基础命令&#xff0c;所有所有操作都建立在单表 上&#xff0c;未涉及多表操作。 4.3 高级查询 4.3.1 聚合函…