重写 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 的不同条件来自两个完全不同的标志。重构此类代码的最佳方法是什么?

如果你有真实的状态和类型,那么你可以应用下一个逻辑。 类 主要是类型的反映,某些行为和属性取决于类型。 (例如 AnimalCat extends AnimalDog extends Animal)。状态会说明该类型,例如 Status.AWAKEStatus.SLEEPING。状态不会改变 class 的类型,而是改变它的一些行为。

所以: type 是多态性的优秀候选者(如果它确实表示类型)

status 应该是一个存在于所有子class 中的 enum/other class。状态没有说明正在谈论的事情。

每个 subclass 可以实现自己的 myOtherMethod,或者,如果基于状态的方法总是相同的,则在 superclass.

另一方面,如果 typestatus(以及它们的行为)没有任何共同点,它们应该是分开的 classes 并且与每个都无关其他。但是从这个问题中推断出我认为它们在某种程度上是相关的。