重构第20天 提取子类(Extact SubClass)
2016-04-09 23:35
337 查看
理解:提取子类就是把基类中,不是所有子类或者只有少数子类用到的方法,提取出来,调整到子类中去。
详解:下面的代码中我们用到一个单一的类Registration,来处理学生选课信息。
从上面的代码我们可以看到有两种不同的上下文关系,我们意识到我们会在两种不同的上下文中使用Registration类,NonRegistrationAction和Notes只有在我们处理未注册情况下才用到。所以我们将NonRegistration和Notes提到单独的NonRegistration类中。
这样也满足面向对象五大原则之一的单一职责。同时也让类的结构变得更加清晰,增强了可维护性。
详解:下面的代码中我们用到一个单一的类Registration,来处理学生选课信息。
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; } }
从上面的代码我们可以看到有两种不同的上下文关系,我们意识到我们会在两种不同的上下文中使用Registration类,NonRegistrationAction和Notes只有在我们处理未注册情况下才用到。所以我们将NonRegistration和Notes提到单独的NonRegistration类中。
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; } }
这样也满足面向对象五大原则之一的单一职责。同时也让类的结构变得更加清晰,增强了可维护性。
相关文章推荐
- Linux文本三剑客之awk的使用
- 蓝桥杯6
- Windows平台下sbt的安装设置
- Android开发中java.lang.RuntimeException: Unable to start activity ComponentInfo{xxx}: java.lang.NullPoi
- 解决thinkphp设置session周期无效的问题
- 【leetcode】32. Longest Valid Parentheses
- 解决thinkphp设置session周期无效的问题
- 蓝桥杯3
- 学习理论-模型选择-2-训练样本数量与误差上界
- 你需要每天写代码吗?
- 深入浅出RxJava四-在Android中使用响应式编程
- Arrays类
- android studio 入门
- 生产者消费者模型
- hexo干货系列:(八)hexo文章自动隐藏侧边栏
- MySQL 锁的深入了解
- 栈溢出笔记1.4 黑掉example_2
- CI面向对象的加强利用
- android Date 和 Calendar
- SCAN:一种基于密度的社团发现算法