用更动态的东西替换硬编码类是否常见?

时间:2013-03-02 10:18:31

标签: refactoring

我正在读福勒的“重构”,第1章。

在第51页上,您会看到附有价格等级的电影。 第一种方法是:使用继承来创建多个电影,每个电影都使用其独特的getCharge方法来计算价格。在第38页,这种方法被放弃了,因为它太静态了 - 改变电影的分类太难了。但是,在第51页上再次使用继承,这次是价格。增加了三个价格子类:ChildrensPrice,NewReleasesPrice和RegularPrice。在此设计中,通过更改其价格对象更容易更改电影的分类。但是在这里添加新的价格类别涉及添加新类。

根据具有名称字段的接口或抽象类来定义类价格会不会更容易,因此名称可以是“ChildrensPrice”,您可以定义您想要的任何其他价格类别,而无需编写新类?

这是一个带有名称的重构模式,例如:“将硬编码类更改为更具动态性的表示形式”?

这种方法的优点和缺点是什么?

1 个答案:

答案 0 :(得分:1)

价格类别标签的方法更具“动态性”,即使在运行时也可以轻松添加新的价格类别。另一方面,每个价格类别具有一个类的“静态”方法允许您在常用类型系统中表达更多约束。

例如,如果某个界面只适用于孩子的价格,那么使用静态方法,您可以在代码中表达约束。使用动态方法,编译器无法区分两种价格类别。 (在类型系统中尽可能多地表达约束通常是一个好主意。)

这就是关于一般情况的所有说法。哪种方法更好最终取决于具体要求。