当前位置: 首页 > news >正文

clean code-代码整洁之道 阅读笔记(第十二章)

第十二章 系统

12.1 通过选进设计达到整洁目的

Kent Beck关于简单设计'的四条规则,对于创建具有良好设计的软件有着莫大的帮助。

  • 据Kent所述,只要遵循以下规则,设计就能变得"简单":
  • 运行所有测试;
  • 不可重复;
  • 表达了程序员的意图;
  • 尽可能减少类和方法的数量;
  • 以上规则按其重要程度排列。
12.2 简单设计规则1:运行所有测试

        只要系统可测试,就会导向保持类短小且目的单一的设计方案。

        紧耦合的代码难以编写测试。同样,编写测试越多,就越会遵循1DIP之类规则,使用依赖注入、接口和抽象等工具尽可能减少耦合。

        遵循有关编写测试并持续运行测试的简单、明确的规则,系统就会更贴近OO低耦合度高内聚度的目标。编写测试引致更好的设计。

12.3 简单设计规则2~4:重构

        有了测试,就能保持代码和类的整洁,方法就是递增式地重构代码。

        测试消除了对清理代码就会破坏代码的恐惧。

        在重构过程中,可以应用有关优秀软件设计的一切知识。提升内聚性,降低耦合度,切分关注面,模块化系统性关注面,缩小函数和类的尺寸,选用更好的名称,如此等等。这也是应用简单设计后三条规则的地方:消除重复,保证表达力,尽可能减少类和方法的数量。

12.4 不可重复

      要想创建整洁的系统,需要有消除重复的意愿,即便对于短短几行也是如此。

        “小规模复用”可大量降低系统复杂性。要想实现大规模复用,必须理解如何实现小规模复用。

        模板方法模式是一种移除高层级重复的通用技巧。

12.5 表达力
  • 可以通过选用好名称来表达。
  • 也可以通过保持函数和类尺寸短小来表达。
  • 还可以通过采用标准命名法来表达。
  • 编写良好的单元测试也具有表达性。测试的主要目的之一就是通过实例起到文档的作用。读到测试的人应该能很快理解某个类是做什么的。
  • 不过,做到有表达力的最重要方式却是尝试。
12.6 尽可能少的类和方法

        我们的目标是在保持函数和类短小的同时,保持整个系统短小精悍。不过要记住,这在关于简单设计的四条规则里面是优先级最低的一条。所以,尽管使类和函数的数量尽量少是很重要的,但更重要的却是测试、消除重复和表达力。

12.7 小结

        遵循简单设计的实践手段,开发者不必经年学习就能掌握好的原则和模式。

相关文章:

clean code-代码整洁之道 阅读笔记(第十二章)

第十二章 系统 12.1 通过选进设计达到整洁目的 Kent Beck关于简单设计的四条规则,对于创建具有良好设计的软件有着莫大的帮助。 据Kent所述,只要遵循以下规则,设计就能变得"简单":运行所有测试;不可重复&…...

FFmpeg YUV编码为H264

使用FFmpeg库把YUV420P文件编码为H264文件&#xff0c;FFmpeg版本为4.4.2-0。 需要yuv测试文件的&#xff0c;可以从我上传的MP4文件中用ffmpeg提取&#xff0c;命令如下&#xff1a; ffmpeg -i <input.mp4> -pix_fmt yuv420p <output.yuv> 代码如下&#xff1a;…...

【C语言】顺序表(上卷)

什么是数据结构&#xff1f; 数据结构是由“数据”和“结构”两词组合而来的。 数据需要管理。数据结构就是计算机存储、组织数据的方式。比如一个班级就是一个结构&#xff0c;管理的就是班级里的学生。如果我们要找三年2班的同学李华&#xff0c;就可以直接去三年2班找而不…...

Luma AI如何注册:文生视频领域的新星

文章目录 Luma AI如何注册&#xff1a;文生视频领域的新星一、Luma 注册方式二、Luma 的效果三、Luma 的优势四、Luma 的功能总结 Luma AI如何注册&#xff1a;文生视频领域的新星 近年来&#xff0c;Luma AI 凭借其在文生视频领域的创新技术&#xff0c;逐渐成为行业的新星。…...

一站式实时数仓Hologres整体能力介绍

讲师&#xff1a;阿里云Hologres PD丁烨 一、产品定位 随着技术的进步&#xff0c;大数据正从规模化转向实时化处理。用户对传统的T1分析已不满足&#xff0c;期望获得更高时效性的计算和分析能力。例如实时大屏&#xff0c;城市大脑的交通监控、风控和实时的个性化推荐&…...

如何在 Windows 上安装 Docker Desktop

如何在 Windows 上安装 Docker Desktop Docker 是一个开放平台&#xff0c;用于开发、部署和运行应用程序。Docker Desktop 是 Docker 在 Windows 和 macOS 上的官方客户端&#xff0c;它使得开发者能够轻松地在本地环境中构建、运行和共享容器化应用程序。本文将详细介绍如何…...

WPF由文本框输入的内容动态渲染下拉框

在做项目过程中&#xff0c;需要扫码枪扫描快递单号或者手动输入快递单号时&#xff0c;自动检索该单号是哪个快递公司的&#xff0c;下拉框中自动带出该单号的快递公司。当输入的快递单号不存在时&#xff0c;将数据库中所有快递公司都带出 效果&#xff1a; 通过输入的快递单…...

RPCMon:一款基于ETW的RPC监控工具

关于RPCMon RPCMon是一款基于事件跟踪的WindowsRPC监控工具&#xff0c;该工具是一款GUI工具&#xff0c;可以帮助广大研究人员通过ETW&#xff08;Event Tracing for Windows&#xff09;扫描RPC通信。 RPCMon能够为广大研究人员提供进程之间RPC通信的高级视图&#xff0c;该…...

【odoo】常用的字符转义:“>“,“<“,““,“/“等

概要 字符转义是指在编写代码或处理文本数据时&#xff0c;将特殊字符转换为另一种形式&#xff0c;以便在特定的上下文中正确解析和处理这些字符。 内容 特殊字符描述XML转义表示法&和符号&amp;<小于符号<>大于符号>"双引号&quot;单引号&ap…...

李宏毅深度学习项目——HW1个人笔记

视频链接 PDF链接 googleColab链接 GoogleColab是一个免费的jupyter notebook&#xff0c;可以用上面的gpu资源进行训练 题目 通过前两天的数据&#xff0c;预测第三天某个人感染新冠的概率 范例 导包 # Numerical Operations import math import numpy as np# Reading/Wr…...

3D Gaussian Splatting Windows安装

0.安装C++ 编译器 https://aka.ms/vs/17/release/vs_buildtools.exe 1.下载源码 git clone https://github.com/graphdeco-inria/gaussian-splatting --recursive 2.安装cuda NVIDIA GPU Computing Toolkit CUDA Toolkit Archive | NVIDIA Developer 3.安装COLMAP...

人脸识别——可解释的人脸识别(XFR)人脸识别模型是根据什么来识别个人的

可解释性人脸识别&#xff08;XFR&#xff09;&#xff1f; 人脸识别有一个任务叫1:N&#xff08;识别&#xff09;。这个任务将一个人的照片与N张注册照片进行比较&#xff0c;找出相似度最高的人。 这项任务用于刑事调查和出入境点。在犯罪调查中&#xff0c;任务从监控摄像…...

仓库管理系统的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;管理员管理&#xff0c;公告管理&#xff0c;物资管理&#xff0c;基础数据管理&#xff0c;用户管理 用户账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;公告管理&#xff0c;物…...

最火AI角色扮演流量已达谷歌搜索20%!每秒处理2万推理请求,Transformer作者公开优化秘诀

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践&#xff0c;基于大语言模型和RAG技术&#xff0c;集合海量工业领域生态资源方优质产品和知识服务&#xff0c;旨在通过智能搜索、连续交互&#xff0c;实时生成个性化的内容…...

MySQL:MySQL分组排序函数rank()、row_number()、dense_rank()与partition by结合使用

一、前言 在 MySQL 中&#xff0c;虽然标准的 SQL 函数 RANK(), ROW_NUMBER(), 和 DENSE_RANK() 是 SQL 标准的一部分&#xff0c;但早期的 MySQL 版本并不直接支持这些窗口函数。然而&#xff0c;从 MySQL 8.0 开始&#xff0c;这些函数被引入以支持窗口函数&#xff08;也称为…...

opencv c++ 检测图像尺寸大小,标注轮廓

1. 项目背景 本项目旨在开发一个图像处理程序&#xff0c;通过使用计算机视觉技术&#xff0c;能够自动检测图像中物体的尺寸并进行分类。项目利用了开源的计算机视觉库 OpenCV&#xff0c;实现了图像的灰度处理、二值化、轮廓检测、边界框绘制以及尺寸分类等功能。通过这些功…...

Python数据可视化基础:使用Matplotlib绘制图表

Python数据可视化基础&#xff1a;使用Matplotlib绘制图表 数据可视化是数据分析中的重要环节&#xff0c;它可以帮助我们更直观地理解数据。Python作为一门强大的编程语言&#xff0c;提供了多种库来支持数据可视化&#xff0c;其中Matplotlib是最为流行和功能丰富的库之一。…...

Java开发接口设计的原则

在现代软件开发实践中&#xff0c;接口设计扮演着至关重要的角色。它不仅关乎代码的结构和未来的可维护性&#xff0c;还直接影响到软件系统的灵活性和扩展性。本文将通过实例详解几个核心的接口设计原则&#xff0c;帮助开发者更好地编写和管理接口&#xff0c;从而提升软件的…...

[火灾警报系统]yolov5_7.0-pyside6火焰烟雾识别源码

国内每年都会发生大大小小的火灾&#xff0c;造成生命、财产的损失。但是很多火灾如果能够早期发现&#xff0c;并及时提供灭火措施&#xff0c;将会大大较小损失。本套源码采用yolov5-7.0目标检测算法结合pyside6可视化界面源码&#xff0c;当检测到火灾时&#xff0c;能否发出…...

机器学习和深度学习区别

定义和范围&#xff1a; 机器学习&#xff1a;是一门多领域交叉学科&#xff0c;涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科。它专门研究计算机怎样模拟或实现人类的学习行为&#xff0c;以获取新的知识或技能&#xff0c;重新组织已有的知识结构使之不断改…...

从CMSIS-DAP到JTAG:一篇讲透Keil5/Keil4下ARM芯片的下载与调试设置差异

从CMSIS-DAP到JTAG&#xff1a;深度解析Keil环境下ARM芯片调试接口的实战差异 当你在Keil环境中从STM32F103切换到STM32F407时&#xff0c;是否遇到过下载算法突然失效的情况&#xff1f;或是更换了J-Link仿真器后&#xff0c;原本流畅的调试过程变得寸步难行&#xff1f;这些问…...

MusePublic圣光艺苑惊艳案例:基于真实建筑数据生成文艺复兴城市图景

MusePublic圣光艺苑惊艳案例&#xff1a;基于真实建筑数据生成文艺复兴城市图景 1. 引言&#xff1a;当古典建筑遇见AI画笔 想象一下&#xff0c;你手头有一份欧洲某座历史名城的建筑测绘数据&#xff0c;里面记录了数百座教堂、广场和宫殿的精确尺寸与风格特征。过去&#x…...

Qwen3.5-4B-Claude-Opus行业落地:高校编程教学辅助与算法解题思路生成

Qwen3.5-4B-Claude-Opus行业落地&#xff1a;高校编程教学辅助与算法解题思路生成 1. 模型介绍与教育场景适配性 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是一个专为推理任务优化的轻量级AI模型&#xff0c;特别适合教育领域的应用场景。该模型基于Qwen3.5-4B架…...

PyTorch 2.8镜像多场景落地:在线教育平台个性化习题生成引擎部署

PyTorch 2.8镜像多场景落地&#xff1a;在线教育平台个性化习题生成引擎部署 1. 教育行业的AI转型机遇 在线教育行业正面临个性化学习的迫切需求。传统题库系统存在内容同质化、更新成本高、难以匹配学生个体差异等问题。基于PyTorch 2.8构建的个性化习题生成引擎&#xff0c…...

Fish-Speech-1.5开源模型的企业级部署架构设计

Fish-Speech-1.5开源模型的企业级部署架构设计 如果你正在考虑将Fish-Speech-1.5这个强大的语音合成模型引入到自己的业务中&#xff0c;比如做个智能客服、有声书平台&#xff0c;或者给产品加个语音播报功能&#xff0c;那你肯定不能只满足于在本地电脑上跑个Demo。一旦涉及…...

NSudo:突破Windows权限壁垒的系统管理利器

NSudo&#xff1a;突破Windows权限壁垒的系统管理利器 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo 一、核心价…...

ChatGPT官网镜像实战:生产环境内存泄漏排查与修复全记录

国内开发者如果想借助ChatGPT进行生产环境故障排查和性能分析&#xff0c;最便捷的方案是通过聚合镜像平台RskAi&#xff08;www.rsk.cn&#xff09;。该平台支持ChatGPT&#xff08;GPT-4o&#xff09;国内直接访问&#xff0c;无需任何特殊网络环境&#xff0c;且提供每日免费…...

别急着跑流程!单细胞测序数据分析前,你的GEO数据真的‘干净’吗?

别急着跑流程&#xff01;单细胞测序数据分析前&#xff0c;你的GEO数据真的‘干净’吗&#xff1f; 当你在GEO数据库中兴奋地找到那个包含1534个样本的单细胞数据集时&#xff0c;是否曾想过——这些看似完美的数据背后可能隐藏着致命的陷阱&#xff1f;许多生信分析者习惯性地…...

实战应用:使用autoclaw在快马平台快速开发销售数据监控看板

最近在做一个销售数据监控看板的需求&#xff0c;发现用autoclaw配合InsCode(快马)平台可以快速实现从开发到部署的全流程。整个过程比想象中顺畅很多&#xff0c;特别适合需要快速验证业务场景的情况。这里记录下具体实现思路和关键点&#xff1a; 数据准备与连接 首先用autoc…...

LeagueAkari终极教程:英雄联盟玩家的智能辅助工具完全指南

LeagueAkari终极教程&#xff1a;英雄联盟玩家的智能辅助工具完全指南 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkar…...