当前位置: 首页 > 知识库问答 >
问题:

处理状态困境

朱俭
2023-03-14
    null
    null
CREATE TABLE `status` (
  `id` INT NOT NULL,
  `name` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`));

CREATE TABLE IF NOT EXISTS `order` (
  `id` INT NOT NULL AUTOINCREMENT,
  `status_id` INT NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `order_status_idx` (`status` ASC),
  CONSTRAINT `order_status_id`
    FOREIGN KEY (`status_id`)
    REFERENCES `status` (`id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);

后端代码有一个枚举,它在代码中赋予这些预定义整数一个含义

enum Status {
    PAID = 7;
};

// While processing as action ...
order.status = Status::PAID;

web服务API将返回状态号

order: { id: 1, status_id: 7 }

前端代码有一个类似的枚举,它在代码中赋予这些预定义整数一个含义。(如后端代码)

    null
    null
CREATE TABLE IF NOT EXISTS `order` (
  `id` INT NOT NULL AUTOINCREMENT,
  `status` ENUM('PAID') NULL,
  PRIMARY KEY (`id`));
enum Status {
    PAID = 'PAID'
};
class Status {
public:
    static const string PAID = PAID;
};
// While processing as action ...
order.status = Status::PAID;
order: { id: 1, status: 'PAID' }

优点:

  • 数据库定义良好并规范化
  • 从API返回的数据是描述性的,并提供了所需的含义。
  • 使用的状态常量已包含其含义,这减少了出错的机会。
  • 对数据库中的列使用枚举类型有其局限性。以后使用ALTER命令向该枚举添加新的状态常量的开销很大,特别是对于像ordertable.
  • 这样的大型表
CREATE TABLE `status` (
  `key` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`key`));
CREATE TABLE IF NOT EXISTS `order` (
  `id` INT NOT NULL AUTOINCREMENT,
  `status` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`id`),
  INDEX `order_status_idx` (`status` ASC),
  CONSTRAINT `order_status`
    FOREIGN KEY (`status`)
    REFERENCES `status` (`key`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION);
enum Status {
    PAID = 'PAID'
};
class Status {
public:
    static const string PAID = PAID;
};
// While processing as action ...
order.status = Status::PAID;
order: { id: 1, status: 'PAID' }
    null
  • ???

谢谢你。

共有1个答案

薛烨霖
2023-03-14

这是我解决这个问题的方法

  1. 我在orders表中添加一列status,类型为string
  2. 定义类中所有状态的常量,以便于引用它们。
  3. 在创建订单时制定一个验证规则,使状态值位于前面定义的唯一允许的值中。

这使得只需编辑代码库就可以很容易地添加新的状态,并且检索到的状态值仍然是一个字符串(描述性的)。

 类似资料:
  • Apache Beam最近通过和注释引入了状态单元格,并在Apache Flink和Google Cloud Dataflow中提供了部分支持。

  • 这是我的同意模式 这是同意控制器获取声明 这是声明后的同意 同意html thymeleaf表单是 提交表格后。我得到这个错误 HTTP状态500-请求处理失败;嵌套异常是org.thymeleaf.exceptions.TemplateProcessing异常:异常评估SpringEL表达式:"user.providers"(提供者/createOrUpdateConentForm 组织。spr

  • 当编写器抛出异常时,我希望能够将步骤和作业状态设置为失败。在做了一些调试和检查Spring批处理源代码后,我注意到配置了一个,它认为是一个致命的异常,因此将作业状态设置为FAILED,所以我将代码包装在我的编写器中的一个try-get中,将包装在中,现在作业和步骤状态设置为FAILED,这是我想要的。我不确定这是否是正确的方法,因为我在任何地方都找不到它的文档,的留档也没有提到它。所以,问题是:这

  • 我们正在构建一个具有两个流的应用程序: 大量信息流 我们希望连接这两个流以获得共享状态,以便第一个流可以使用第二个状态进行扩展。 每天左右,拼花文件(第二流的源代码)都会更新,这需要我们清除第二流的状态并重建它(可能需要大约2分钟)。 问题是,我们可以在该进程运行时阻止/延迟来自第一流的消息吗? 谢谢。

  • 如何在SpringMVC中实现自定义http错误处理。 例如:我有一个urlhttp://localhost:8080/demo/canvas 它显示我的画布页面,但如果用户错过了网址并键入http://localhost:8080/demo/canva 它显示了Tomcat呈现的HTTP状态404。我希望它是自定义jsp页面。

  • 做一个简单的井字游戏。我尝试在鼠标进入时突出显示单个单元格,然后在鼠标离开时恢复正常-使用状态和内联样式来完成这一点。状态在鼠标进入时变化很好(样式也是如此),但在鼠标离开时不会恢复正常。我在这里错过了什么?