"《31天重构学习笔记中文版》是关于编程规范和软件工程实践的书籍,由Sean Chambers编著。这本书详细介绍了重构技术,旨在帮助开发者改进代码质量,提高软件可维护性。其中,第31天的内容关注于封装集合(Encapsulate Collection)这一重构技巧。"
在软件开发中,重构是一种重要的实践,它涉及到在不改变软件外部行为的情况下,改善其内部结构。《31天重构学习笔记》提供了31个重构技巧,每个技巧都针对特定的代码问题提出解决方案。在这个案例中,作者讨论了如何封装集合,以提高代码的封装性和安全性。
原始代码示例展示了`Order`类,它包含一个`_orderLines`私有列表,用于存储`OrderLine`对象。`Order`类公开了一个`IList<OrderLine>`类型的`OrderLines`属性,允许外部直接访问和操作集合。这可能会导致代码的脆弱性,因为外部代码可以直接修改`Order`对象的状态,违背了面向对象设计的原则。
Sean Chambers提出的重构建议是将集合操作封装起来,以减少外部对内部实现细节的依赖。他建议:
1. 不再直接暴露`IList<OrderLine>`,而是提供一组公共方法来添加、删除和访问订单行。这样可以更好地控制集合的变更,确保业务逻辑的正确执行。例如,`AddOrderLine`和`RemoveOrderLine`方法已经包含了计算总价的逻辑,避免了外部代码可能的错误。
2. 在`RemoveOrderLine`方法中,使用`Find`查找要删除的订单行,而不是直接传入参数。这是因为传入的参数可能并不是集合中的元素,这样做可以防止意外的删除操作。
3. 对于`OrderLine`类,保持其属性`Total`的私有可设置,仅通过公共getter访问,进一步增强了数据安全性。
封装集合不仅可以保护数据,还能减少代码的复杂性,使得每个类和方法都专注于自己的职责。这样的设计遵循了单一职责原则(Single Responsibility Principle),提高了代码的可读性和可测试性。重构的过程就是逐步改进代码结构,使其更符合设计原则,从而提升软件的整体质量。
这本学习笔记通过实例详细解释了重构中的一个关键技巧,即如何通过封装集合来增强代码的封装性和健壮性。这对于任何想要提升软件工程技能的开发者来说,都是宝贵的学习资源。