我有下面的状态类:
class JobStatus(models.TextChoices):
SUCCESS = 'SUCCESS'
RUNNING = 'RUNNING'
FAILED = 'FAILED'
WAITING = 'WAITING'
每次我运行一个作业时,它都会有一个这些雕像。问题是,当工作失败时,失败的原因可能不止一个。一方面,我想知道原因。另一方面,我不想为每个状态添加Enum项。我可以保留另一个包含错误的分离变量fail_reason
,但这感觉像是糟糕的设计。我还想过创建一个字段来保存原因,另一个字段来保存状态,但不确定这是个好主意。处理这个问题的好方法是什么?
PS:models.TextChoices
是Django的(它做什么并不重要)。
我喜欢使用二进制标志来表示每个状态。为每个状态分配一个值:
class JobStatus(models.TextChoices):
STATUS = {0: 'SUCCESS',
2**0: 'RUNNING',
2**1: 'FAILED',
2**2: 'WAITING',
2**N: 'LAST_STATUS'}
这可以同时跟踪所有可能的状态,并且每个状态的组合都是唯一的,因此您可以使用二进制" and "跟踪所有状态。操作如下:
status = 3
if status == 0:
status_text = STATUS.get(0)
else:
for n in range(N):
if status & 2**n == 2**n:
status_text += STATUS.get(2**n)+", "
status_text = status_text[:-2]
应该返回:"RUNNING, FAILED"显然,你可以处理字符串无论如何为你的项目工作,只要保持整数状态值在你的代码中,如果你需要评估它的条件。我也喜欢用0作为我的"成功"状态,所以任何大于0的都表示有问题。