gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:10:18 28 4
gpt4 key购买 nike

我正在阅读 Fowler 的“重构”,第 1 章。

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

如果有一个基于接口(interface)的类 Price 或带有名称字段的抽象类,那么名称可以是“ChildrensPrice”并且您可以定义任何其他您想要的价格类别,而无需编写新类,这不是更容易吗?

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

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

最佳答案

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

例如,如果有一个只适用于 child 价格的接口(interface),您可以使用静态方法在代码中表达约束。使用动态方法,编译器无法区分两个价格类别之间的差异。 (在类型系统中表达尽可能多的约束通常是个好主意。)

关于一般情况,我只能说这么多。哪种方法更好最终取决于特定要求。

关于refactoring - 用更动态的东西替换硬编码类是否很常见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15173326/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com