如何在非常大的代码库中维护枚举(并添加新值)

问题描述 投票:0回答:1

在一个非常大和旧的代码库中,假设我们正在使用一个数据库列

status
,枚举值为
NEW
IN_PROGRESS
COMPLETED
REJECTED
.

现在这个

status
在代码中的多个条件下使用

if (status == `NEW` || status ==  `IN_PROGRESS`) {
  // do something
}

或者可能在一些 SQL 语句中,比如

WHERE status NOT IN ("REJECTED")

现在,如果我们想向

status
添加一个新的枚举值,例如。 “取消”,那么我们必须处理代码中所有使用
status
的地方。

考虑到代码库可能有点分布式、庞大且相当陈旧,这种更改将被证明是非常困难的。我们如何改进这一点,以便更容易维护这些变化?

我不是在写任何特定的语言,只是概念,因为它应该可以复制到多种语言。

java coding-style maintainability
1个回答
0
投票

这是 Java 还是 JavaScript?无论如何,您应该能够将一些多态行为添加到您的枚举中。这意味着每种类型的枚举都知道如何做某事或是否允许做某事。让我们看一个简单的 Java 示例:

public enum Status {
    NEW(true),
    IN_PROGRESS(true),
    REJECTED(false);

    private final boolean allowsSomething;

    Status(boolean allowsSomething) {
        this.allowsSomething = allowsSomething;
    }

    public boolean allowsSomething() {
        return allowsSomething;
    }
}

现在,让我们重构你的方法。而不是这个:

void someMethod() {
    Status status = someStatus();
    if (status == Status.NEW || status == Status.IN_PROGRESS) {
        // do something
    }
}

我们会这样使用它:

void someMethod_refactored() {
    Status status = someStatus();
    if (status.allowsSomething()) {
        // do something
    }
}

假设您现在想要向枚举添加一个附加值,例如,

CANCELLED
。您将被迫指定
allowsSomething
标志,然后该枚举的所有客户端都将正常工作。

希望这有帮助,如果有帮助,我将不胜感激。

© www.soinside.com 2019 - 2024. All rights reserved.