Refactoring 笔记 - 代码的坏味道总结

本文介绍了软件重构中的关键技巧,包括如何处理重复代码、调整类职责、优化参数传递等,并强调了面向对象的设计原则。
同一个 class 内的两个或多个方法有重复代码:使用 Extract Method 提抽取复代码。
多个互为兄弟的 class 含重复代码:对这些 class 使用 Extract Method 提抽取复代码,再使用
pull up method 把重复代码向上拉到父类中。
多个不相关的 class 出现重复代码:应该考虑使用 Extract Class,将重复代码抽取到一个独立的
class 中。抽取时应注意这些代码是否真的需要一个独立的类,应照 OO 原则将这些代码归属到
应该拥有这些代码的 class 中。
 
理清 class 的职责,把一些成员变量和方法抽取到一个新的 class 中或子类中。
技巧:可以先确定客户端如何使用它们,使用 Extract Interface 抽取接口,这可以帮助程序员
看清楚该如何分解这个 class。
 
参数过多可以考虑把这些参数由一个对象提供。
如果这些参数缺乏合理的对象归属,可以考虑为它们创建一个参数对象。
 
一般情况下一个变更修改应该只有一个修改点,如果不能做到这点,就应该想想这些地方是否
需要重构了(可以看看 OOAD 原则中的单一责任原则)。
 
如果需要修改的代码散布四处将会很难找到它们,也很容易忘记某个重要的修改。这种情况下
可以考虑把所有需要修改的代码放进同一个 class。如果没有合适的 class 可以创建一个,比如
说创建一个 Inline class。
当发现一个 class 的某个方法中使用了很多另一个对象的方法或值时就应该考虑把这个方法移到
它该去的地方。
有时候方法中只有一部分代码出现这种情况就应该考虑把这部分代码抽取出成独立的方法再移
到它该去的地方。
如果一个方法用上数个 class 的特性,那么应该考虑把这部份代码抽取为一个个的小方法再把它
们移到它该去的地方。
不管怎么说最根本的原则是总是将一起变化的东西放到一块儿。
 
应该使用面向对象中的多态还替换 case 语句。
一、数据采集层:多源人脸数据获取 该层负责从不同设备 / 渠道采集人脸原始数据,为后续模型训练与识别提供基础样本,核心功能包括: 1. 多设备适配采集 实时摄像头采集: 调用计算机内置摄像头(或外接 USB 摄像头),通过OpenCV的VideoCapture接口实时捕获视频流,支持手动触发 “拍照”(按指定快捷键如Space)或自动定时采集(如每 2 秒采集 1 张),采集时自动框选人脸区域(通过Haar级联分类器初步定位),确保样本聚焦人脸。 支持采集参数配置:可设置采集分辨率(如 640×480、1280×720)、图像格式(JPG/PNG)、单用户采集数量(如默认采集 20 张,确保样本多样性),采集过程中实时显示 “已采集数量 / 目标数量”,避免样本不足。 本地图像 / 视频导入: 支持批量导入本地人脸图像文件(支持 JPG、PNG、BMP 格式),自动过滤非图像文件;导入视频文件(MP4、AVI 格式)时,可按 “固定帧间隔”(如每 10 帧提取 1 张图像)或 “手动选择帧” 提取人脸样本,适用于无实时摄像头场景。 数据集对接: 支持接入公开人脸数据集(如 LFW、ORL),通过预设脚本自动读取数据集目录结构(按 “用户 ID - 样本图像” 分类),快速构建训练样本库,无需手动采集,降低系统开发与测试成本。 2. 采集过程辅助功能 人脸有效性校验:采集时通过OpenCV的Haar级联分类器(或MTCNN轻量级模型)实时检测图像中是否包含人脸,若未检测到人脸(如遮挡、侧脸角度过大),则弹窗提示 “未识别到人脸,请调整姿态”,避免无效样本存入。 样本标签管理:采集时需为每个样本绑定 “用户标签”(如姓名、ID 号),支持手动输入标签或从 Excel 名单批量导入标签(按 “标签 - 采集数量” 对应),采集完成后自动按 “标签 - 序号” 命名文件(如 “张三
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值