重写 Java class 以清理和测试代码
Rewrite Java class to clean and testable code
所以我有一个 Java class 看起来像这样:
class CalendarEntry {
private char type;
private char status;
...
public void myMethod() {
switch (type) {
...
}
}
public String myOtherMethod() {
switch (status) {
...
}
}
// and so on
}
类型和状态是两个不同的attributes/flags。两者都可以设置 3 个以上的不同条件。
如果我只有其中一个 "flags" 我可以使用多态性轻松重构代码并删除所有 swtich 案例和 if else 块,这些块确实使代码变得一团糟。
但现在我有类似 >= 3x3 的不同条件来自两个完全不同的标志。重构此类代码的最佳方法是什么?
如果你有真实的状态和类型,那么你可以应用下一个逻辑。 类 主要是类型的反映,某些行为和属性取决于类型。 (例如 Animal
、Cat extends Animal
和 Dog extends Animal
)。状态会说明该类型,例如 Status.AWAKE
、Status.SLEEPING
。状态不会改变 class 的类型,而是改变它的一些行为。
所以:
type
是多态性的优秀候选者(如果它确实表示类型)
status
应该是一个存在于所有子class 中的 enum/other class。状态没有说明正在谈论的事情。
每个 subclass 可以实现自己的 myOtherMethod
,或者,如果基于状态的方法总是相同的,则在 superclass.
另一方面,如果 type
和 status
(以及它们的行为)没有任何共同点,它们应该是分开的 classes 并且与每个都无关其他。但是从这个问题中推断出我认为它们在某种程度上是相关的。
所以我有一个 Java class 看起来像这样:
class CalendarEntry {
private char type;
private char status;
...
public void myMethod() {
switch (type) {
...
}
}
public String myOtherMethod() {
switch (status) {
...
}
}
// and so on
}
类型和状态是两个不同的attributes/flags。两者都可以设置 3 个以上的不同条件。
如果我只有其中一个 "flags" 我可以使用多态性轻松重构代码并删除所有 swtich 案例和 if else 块,这些块确实使代码变得一团糟。
但现在我有类似 >= 3x3 的不同条件来自两个完全不同的标志。重构此类代码的最佳方法是什么?
如果你有真实的状态和类型,那么你可以应用下一个逻辑。 类 主要是类型的反映,某些行为和属性取决于类型。 (例如 Animal
、Cat extends Animal
和 Dog extends Animal
)。状态会说明该类型,例如 Status.AWAKE
、Status.SLEEPING
。状态不会改变 class 的类型,而是改变它的一些行为。
所以:
type
是多态性的优秀候选者(如果它确实表示类型)
status
应该是一个存在于所有子class 中的 enum/other class。状态没有说明正在谈论的事情。
每个 subclass 可以实现自己的 myOtherMethod
,或者,如果基于状态的方法总是相同的,则在 superclass.
另一方面,如果 type
和 status
(以及它们的行为)没有任何共同点,它们应该是分开的 classes 并且与每个都无关其他。但是从这个问题中推断出我认为它们在某种程度上是相关的。