面向重构:31天学习笔记
需积分: 10 100 浏览量
更新于2024-07-24
收藏 4.36MB PDF 举报
"31天重构系列笔记是关于软件开发中的重构技巧的记录,由Sean Chambers创作并发布在Lostechies博客上。这个系列共有31篇,旨在提供每日一贴的重构建议和实践,主要关注WPF领域的开发。相关的代码示例托管在GitHub上的'schambers/days-of-refactoring'仓库中。"
重构是一种改善现有代码结构而不改变其外在行为的方法,以提高代码可读性、可维护性和设计质量。在这个系列的笔记中,作者 Sean Chambers 分享了如何通过一系列小步骤改进代码,使其更高效、更易于理解和测试。其中一个具体的重构案例是关于封装集合(Encapsulate Collection)的。
在提供的代码片段中,展示了`Order`类,它包含了`_orderLines`私有成员,类型为`List<OrderLine>`,用来存储订单行。`Order`类提供了`OrderLines`属性公开对集合的访问,以及`AddOrderLine`和`RemoveOrderLine`方法来操作集合。然而,这样的设计存在一些问题:
1. **直接暴露内部集合**:`OrderLines`属性返回的是集合的引用,这允许外部代码直接修改集合,违反了封装原则。外部代码可以添加、删除或更改订单行,而无需经过`Order`类的控制,这可能导致状态不一致和错误。
2. **依赖具体实现**:`_orderLines`使用了`List<T>`的具体实现,而不是接口如`IList<T>`。这意味着如果将来需要更换其他类型的集合,代码将需要大量修改。
为了改善这种情况,可以进行以下重构:
- **封装集合访问**:将`OrderLines`属性改为只读,提供公共的`AddOrderLine`和`RemoveOrderLine`方法来控制对集合的修改。这样可以确保所有对集合的操作都经过`Order`类的验证和处理。
- **使用接口替换具体实现**:将`_orderLines`的类型更改为`IList<T>`或更泛化的`ICollection<T>`,这允许在未来更容易地更换集合实现,例如切换到`LinkedList<T>`或`HashSet<T>`。
- **改进`RemoveOrderLine`方法**:目前的方法在`RemoveOrderLine`中查找订单行,这可能导致多次遍历集合。可以考虑使用`List<T>`的`Remove`方法直接删除,或者先找到索引再调用`RemoveAt`,减少遍历次数。
这些重构步骤可以提高代码的稳定性和可维护性,同时也使得`Order`类更加符合面向对象的设计原则。在实际开发中,持续进行类似的重构工作有助于保持代码质量,并且有利于团队协作和长期项目维护。
2018-04-16 上传
2013-07-18 上传
2020-03-13 上传
点击了解资源详情
点击了解资源详情
点击了解资源详情
2011-12-13 上传
点击了解资源详情
点击了解资源详情
oEBuShiShen
- 粉丝: 0
- 资源: 4
最新资源
- 前端协作项目:发布猜图游戏功能与待修复事项
- Spring框架REST服务开发实践指南
- ALU课设实现基础与高级运算功能
- 深入了解STK:C++音频信号处理综合工具套件
- 华中科技大学电信学院软件无线电实验资料汇总
- CGSN数据解析与集成验证工具集:Python和Shell脚本
- Java实现的远程视频会议系统开发教程
- Change-OEM: 用Java修改Windows OEM信息与Logo
- cmnd:文本到远程API的桥接平台开发
- 解决BIOS刷写错误28:PRR.exe的应用与效果
- 深度学习对抗攻击库:adversarial_robustness_toolbox 1.10.0
- Win7系统CP2102驱动下载与安装指南
- 深入理解Java中的函数式编程技巧
- GY-906 MLX90614ESF传感器模块温度采集应用资料
- Adversarial Robustness Toolbox 1.15.1 工具包安装教程
- GNU Radio的供应商中立SDR开发包:gr-sdr介绍