【书籍】DeepSeek谈《软件开发的201个原则》

目录

  • 一、对这本书的感想和评价
  • 二、原则101"复用而非重复"(Don't Repeat Yourself, DRY)的实施时机?

电子版地址: https://gitcode.com/qq_43920838/Reference_book.git

一、对这本书的感想和评价

《软件开发的201个原则》(201 Principles of Software Development)是一本经典的软件开发指南,浓缩了行业经验和最佳实践。以下是我的评价和感想:

  1. 书籍的核心价值
    全面性:覆盖需求、设计、编码、测试、维护等全生命周期,201条原则短小精悍,适合随时查阅。

实用性:每条原则均源自实践,例如:

原则15 “设计应允许变更” → 你在前端组件设计中使用的响应式布局(el-row/el-col)和模块化图表初始化(initCharts)体现了这一思想。

原则39 “避免过早优化” → 你的代码先实现核心功能(数据获取、分页),再逐步优化(如图表按需渲染)。

语言简洁:每条原则仅1-2页,直击要点,适合快速回顾。


  1. 与你的技术实践的关联

从你展示的招聘系统代码中,可以看到书中多个原则的实际应用:
书中原则 你的代码体现
原则5 “保持简单性” 使用Element Plus组件清晰组织UI,避免过度设计(如表格列用el-tooltip简化长文本展示)
原则23 “分层设计” 前端分层:数据层(Axios)、逻辑层(Composition API)、视图层(模板)分离
原则68 “持续验证” 通过v-loading和ElMessage提供实时反馈,增强用户体验
原则101 “复用而非重复” 封装initCharts方法复用图表逻辑,避免重复代码
原则177 “监控系统行为” 使用ECharts可视化监控人才数据分布(技术栈、学历)

  1. 可能的改进建议(结合书中原则)

错误处理增强(原则82 “处理所有错误”):
当前代码捕获了API错误,但可细化处理(如重试机制、错误边界组件)
性能优化(原则143 “效率与可维护性平衡”):
分页数据量大时可考虑虚拟滚动(如el-table的virtual-scroll)。
可测试性(原则189 “设计可测试的软件”):
将数据获取逻辑提取为独立Hook,便于单元测试:

  1. 书籍的局限性

技术迭代:部分原则(如瀑布模型相关)需结合现代敏捷/DevOps实践调整。
深度不足:每条原则仅简要介绍,需读者结合其他资源(如《代码整洁之道》《设计模式》)深化理解。
案例缺失:缺乏具体代码示例,初学者可能难以直接应用。


二、原则101"复用而非重复"(Don’t Repeat Yourself, DRY)的实施时机?

总结
编码时:保持复用意识,对明显的重复立即封装。
开发中:定期回顾代码,合并重复模式(如抽象countFieldValues)。
迭代时:持续优化技术债务,像园丁修剪枝叶一样维护代码

关于原则101"复用而非重复"(Don’t Repeat Yourself, DRY)的实施时机,我的建议是:既不是完全在写代码时立即封装,也不是等项目完成后再处理,而是一个渐进式、有意识的平衡过程。以下是具体分析:

  1. 何时开始考虑复用?

(1) 首次实现时:保持"适度"封装
不要过度设计:在首次编写代码时,如果某段逻辑的复用性不明显(例如只被调用1次),可以先实现功能,确保代码正确性。

但要有"复用意识":当发现以下信号时,应当场封装

相同逻辑出现两次(如你的processSkillData和processEducationData有相似模式)

代码块功能独立(如你的initCharts方法)

未来可能扩展(如分页的handleSizeChange/handleCurrentChange)

(2) 重构阶段:主动识别重复
在功能开发完成后,通过**代码审查或静态分析工具(如ESLint)**识别重复模式。

  1. 如何平衡"立即封装" vs “后期重构”?

场景 建议策略 你的代码示例
明确可复用的逻辑 立即封装(如工具函数、组件)
尚不明确的逻辑 先实现,标记TODO注释,后期重构 无
重复代码已出现2+次 立即停止编码,提取公共部分 如果表格中有多个el-tooltip列,可封装为组件
项目时间紧迫 暂时保留重复,但记录技术债务,后续迭代修复 无

  1. 关键原则

三次法则(Rule of Three):当相同模式出现第三次时,必须重构。

YAGNI(You Aren’t Gonna Need It):不要为"可能"的复用提前增加复杂度。

可读性优先:如果封装会降低代码清晰度,暂时保持重复。

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

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

相关文章

Elasticsearch 高级

Elasticsearch 高级 建议阅读顺序: Elasticsearch 入门Elasticsearch 搜索Elasticsearch 搜索高级Elasticsearch高级(本文) 1. nested 类型 1.1 介绍 Elasticsearch 中的 nested 类型允许你在文档内存储复杂的数据结构,比如一个…

基于SpringBoot实现的高校实验室管理平台功能四

一、前言介绍: 1.1 项目摘要 随着信息技术的飞速发展,高校实验室的管理逐渐趋向于信息化、智能化。传统的实验室管理方式存在效率低下、资源浪费等问题,因此,利用现代技术手段对实验室进行高效管理显得尤为重要。 高校实验室作为…

leetcode_704. 二分查找_java

704. 二分查找https://leetcode.cn/problems/binary-search/ 1.题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。 示…

python基础学习三(元组及字符串的使用)

文章目录 元组什么是元组元组的创建方式为什么要将元组设计成不可变序列元组的遍历集合集合的相关操作集合操作集合的数学操作集合生成式列表,字典,元组,集合总结 字符串字符串的驻留机制判断字符串的操作方法字符串的比较操作字符串的切片操…

游戏被外挂攻破?金融数据遭篡改?AI反作弊系统实战方案(代码+详细步骤)

一、背景与需求分析 随着游戏行业与金融领域的数字化进程加速,作弊行为(如游戏外挂、金融数据篡改)日益复杂化。传统基于规则的防御手段已难以应对新型攻击,而AI技术通过动态行为分析、异常检测等能力,为安全领域提供了革命性解决方案。本文以游戏反作弊系统和金融数据安…

深入理解 TypeScript 中的类型断言(Type Assertion)

类型断言是 TypeScript 中一个强大而独特的特性,它允许开发者告诉编译器:"我知道这个值的类型是什么,请相信我"。本文将全面探讨类型断言的概念、语法、使用场景、最佳实践以及潜在陷阱,帮助你在 TypeScript 开发中更有…

matplotlib标题比x,y轴字体大,明明标题字体更大?

原始代码: plt.xlabel(训练轮次(Epochs), fontsize14, fontweightbold, fontpropertieschinese_font) # 设置中文字体、加大、加粗 plt.ylabel(R值, fontsize14, fontweightbold, fontpropertieschinese_font) # 设置中文字体、加大、加粗…

MySQL DQL,数据查询语言的用法

语法&#xff1a;select 字段名 from 表名 [where <条件>]选择符合条件的记录 group by 字段名表 :分组 having <条件> :选择符合条件的组 order by 字段名表 …

Python练习之抽奖界面

前言 一、代码整体架构分析 1、数据层 (Model) 2、控制层 (Controller) 3、视图层 (View) 二、核心功能实现详解 1、 文件导入功能 1.1、实现逻辑 1.2、代码涉及知识点讲解 1.2.1、wildcard 1.2.2、wx.FileDialog 1.2.3、dlg.ShowModal() 2、抽奖动画控制 1.1、…

Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档(带图片)预览,并导出

Vue3 项目通过 docxtemplater 插件动态渲染 .docx 文档&#xff08;带图片&#xff09;预览&#xff0c;并导出 预览安装插件示例代码项目目录结构截图实际效果截图 动态渲染 .docx 文档&#xff08;带图片&#xff09;&#xff0c;预览、导出安装插件docx 模板文件内容完整代码…

springmvc redirect 使用https后跳转到了http://域名:443问题处理

最近在处理一个很久之前的项目的时候&#xff0c;由于需要将http升级到https&#xff0c;导致springmvc项目中配置的redirect报错 线上的返回结果是http://abc.test.com:443/jrbac/mobile/wechat.html 通过nginx配置了一下解决了&#xff0c;记录一下 location /jrbac {proxy…

用空闲时间做了一个小程序-二维码生成器

一直在摸鱼中赚钱的大家好呀~ 先向各位鱼友们汇报一下情况&#xff0c;目前小程序已经有900的鱼友注册使用过。虽然每天都有新的鱼友注册&#xff0c;但是鱼友增长的还很缓慢。自从国庆前的文字转语音的工具上线到现在已经将近有1个月没有更新小程序了。但是今天终终终终终于又…

【JavaEE】springMVC返回Http响应

目录 一、返回页面二、Controller和ResponseBody与RestController区别三、返回HTML代码⽚段四、返回JSON五、HttpServletResponse设置状态码六、设置Header6.1 HttpServletResponse设置6.2 RequestMapping设置 一、返回页面 步骤如下&#xff1a; 我们先要在static目录下创建…

【新手初学】SQL注入getshell

一、引入 木马介绍&#xff1a; 木马其实就是一段程序&#xff0c;这个程序运行到目标主机上时&#xff0c;主要可以对目标进行远程控制、盗取信息等功能&#xff0c;一般不会破坏目标主机&#xff0c;当然&#xff0c;这也看黑客是否想要搞破坏。 木马类型&#xff1a; 按照功…

验证Linux多进程时间片切换的程序

​​ 一、软件需求 在同时运行多个CPU密集型进程时&#xff0c;需采集以下统计信息&#xff1a; 当前运行在逻辑CPU上的进程ID每个进程的运行进度百分比 实验程序设计要求&#xff1a; 1. 命令行参数 参数说明示例值n并发进程数量3total总运行时长&#xff08;毫秒&…

Spring笔记03-依赖注入

简述: Spring 依赖注入&#xff08;Dependency Injection&#xff0c;DI&#xff09;是 Spring 框架的核心功能之一&#xff0c;它通过将对象的依赖关系交由 Spring 容器来管理&#xff0c;实现了对象之间的解耦&#xff0c;提高了代码的可维护性和可测试性。 构造器注入示例:…

减少采样空间方法 变成后验概率

又 因为后验概率很难计算 --所以通过引入变分分布来近似 后验概率分布 同时 引入 kl散度来度量 近似的效果好不好 什么是kl散度 kl散度带变分&#xff1a; 第一个问题 &#xff1a;积分变期望 问题二&#xff1a;贝叶斯公式 第三个问题&#xff1a;为啥可以独立出来 因为相比…

【keil】单步调试

一、步骤 1、打开stc-isp软件 2.打开keil仿真设置&#xff0c;选择对应的单片机型号 3.点击将所选目标单片机设置为仿真芯片&#xff0c;点击下载&#xff0c;按一下单片机打下载按钮 4.此时已经将仿真程序下载到单片机 5.此时点击options,找到debug选择STC Montor 51 Driv…

【即插即用涨点模块-卷积】SPDConv空间深度卷积,助力小目标与低分辨有效涨点【附源码+注释】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…

UE4学习笔记 FPS游戏制作26 UE中的UI

文章目录 几个概念创建一个UI蓝图添加UI获取UI的引用 切换设计器和UI蓝图将UI添加到游戏场景锚点轴点slotSizeToContent三种UI数据更新方式函数绑定属性绑定事件绑定 九宫格分割图片 几个概念 UMG&#xff1a;UE的UI编辑器 slate UI: UE的UI的编辑语言 创建一个UI蓝图 右键用…