31天重构学习笔记20. 提取子类
2013-02-05 10:04
351 查看
概念:本文中的”提取子类”是指把基类中的一些不是所有子类都需要访问的方法调整到子类中。
正文:当你的基类中存在一些方法不是所有的子类都需要访问,你想将它们调整到子类中时,这个重构会变得很有用了。如下代码所示,我们需要一个 Registration类用来处理学生选课的信息。但是当Registration类开始工作后,我们意识到我们会在两种不同的上下文中使用Registration类,NonRegistrationAction和Notes只有在我们处理未注册情况下才用到。
重构后的代码如下所示,这样也满足面向对象五大原则之一的单一职责。同时也让类的结构变得更加清晰,增强了可维护性。
总结:这个重构方法经常用来规范类的职责,和之前的一些重构方法也有些类似。
正文:当你的基类中存在一些方法不是所有的子类都需要访问,你想将它们调整到子类中时,这个重构会变得很有用了。如下代码所示,我们需要一个 Registration类用来处理学生选课的信息。但是当Registration类开始工作后,我们意识到我们会在两种不同的上下文中使用Registration类,NonRegistrationAction和Notes只有在我们处理未注册情况下才用到。
所以我们将NonRegistration和Notes提到单独的NonRegistration类中。
using System; namespace LosTechies.DaysOfRefactoring.SampleCode.ExtractSubclass.Before { public class Registration { public NonRegistrationAction Action { get; set; } public decimal RegistrationTotal { get; set; } public string Notes { get; set; } public string Description { get; set; } public DateTime RegistrationDate { get; set; } } }
重构后的代码如下所示,这样也满足面向对象五大原则之一的单一职责。同时也让类的结构变得更加清晰,增强了可维护性。
using System; namespace LosTechies.DaysOfRefactoring.SampleCode.ExtractSubclass.After { public class Registration { public decimal RegistrationTotal { get; set; } public string Description { get; set; } public DateTime RegistrationDate { get; set; } } public class NonRegistration : Registration { public NonRegistrationAction Action { get; set; } public string Notes { get; set; } } }
总结:这个重构方法经常用来规范类的职责,和之前的一些重构方法也有些类似。
相关文章推荐
- 31天重构学习笔记20. 提取子类
- 31天重构学习笔记20. 提取子类
- 31天重构学习笔记20. 提取子类
- 31天重构学习笔记20. 提取子类
- 31 天重构学习笔记20. 提取子类
- 31天重构学习笔记19. 提取工厂类
- 31天重构学习笔记10. 提取方法
- 31天重构学习笔记9. 提取接口
- 31天重构学习笔记10. 提取方法
- 31天重构学习笔记19. 提取工厂类
- 31天重构学习笔记19. 提取工厂类
- 31天重构学习笔记13. 提取方法对象
- 31天重构学习笔记17. 提取父类
- 31天重构学习笔记9. 提取接口
- 31天重构学习笔记13. 提取方法对象
- 31天重构学习笔记9. 提取接口
- 31天重构学习笔记10. 提取方法
- 31天重构学习笔记10. 提取方法
- 31天重构学习笔记17. 提取父类
- 31天重构学习笔记13. 提取方法对象