我正在开发一个系统,该系统允许将附件关联到不同的业务实体,例如客户端。 为了简单起见,系统有以下数据库表:
我需要创建一个流程来完全删除客户端实体以及与其关联的任何信息。 这当然可以通过 Saga 模式来实现,但我正在努力确定 - 从设计角度 - 我可能需要哪些信息来支持该模式。
例如:
故事会是这样的:
现在,我需要一种方法来防止在操作正在进行时上传更多附件,因此我想我必须向客户端表添加一个 ClientState(确定、正在删除、已删除等)字段验证这一点。
这是做这种事情的正确方法吗?有更好的方法吗?
您还可以探索您的数据库是否支持独占行锁,这正是您试图通过 ClientState 有效实现的目标。 另外,在查看事务时,请将文件操作放在最后。 这样,如果出现故障,您可以回滚数据库事务,而不会让事情处于非常脏的状态。