我需要设计和实现类似于 Martin Fowler 所说的“工作单元”模式的东西。我听说其他人将其称为“购物车”模式,但我不相信需求是相同的。
具体问题是用户(和我们的 UI 团队)希望能够在创建父对象之前创建和分配子对象(在数据库中具有参照完整性约束)。我今天遇到了我们的另一位设计师,我们提出了两种替代方法。
a) 首先,在数据库中创建一个 dummy parent 对象,然后创建 dummy children 和 dummy assignments。我们可以使用否定键(我们的正常键都是肯定的)来区分数据库中的绵羊和山羊。然后当用户提交整个交易时,我们必须更新数据并添加和对齐真正的键。
我看到这个有几个缺点。
- 它会导致对索引的扰动。
- 我们仍然需要想出一些东西来满足对具有它们的列的唯一约束。
- 我们必须修改许多现有的 SQL 和生成 SQL 的代码,以便为许多 WHERE 子句添加另一个谓词。
- 可以更改 Oracle 中的主键,但这是一个挑战。
b) 为需要能够参与这些反向事务的对象和分配创建瞬态表。当用户点击提交时,我们生成真正的条目并清除旧条目。
我认为这比第一个替代方案更干净,但仍然涉及增加的数据库活动级别。
如果会话在用户执行提交或取消请求之前丢失,这两种方法都要求我有某种方法来使瞬态数据过期。
有没有人以不同的方式解决了这个问题?
在此先感谢您的帮助。