我在这里和这里对 ASP.NET MVC3 应用程序中的状态管理有一些疑问。其中一个答案提到,一个选项是简单地将每个步骤的状态存储在数据库中。
我想知道是否有人对通常如何实现这一点有任何建议,因为当我第一次向我建议时,我有一些想法。
无效的实体
考虑一个包含 3 个步骤的多步骤表单(向导)。我可以将每个步骤保存在数据库中以维护状态,但用户可以在该过程中途关闭 Web 应用程序,使我的数据库包含处于无效状态的实体。
为了克服这个问题,我可以在表中添加一个字段来指示向导是否已完成。任何不一致的项目都可以定期审查并在需要时自动删除,例如,如果在一天结束时在数据库中发现任何无效实体,它们将被自动删除。
这样做的问题是我必须向表中添加字段以存储有关应用程序的元数据。每个存储在多步骤表单中输入的信息的表都需要具有这些字段。这对我来说似乎是错误的。一种解决方案可能是创建一个特定的表来管理它,而不是用元数据污染每个实体表。
中介数据库
我想有一个位于我的应用程序和“真实”数据库之间的数据库。中间数据库将具有存储每个“步骤”的状态信息的表,并且只有当最后一步完成时,此信息才会传输到“真实”数据库(以及从中间删除的临时数据)。
这听起来也类似于 ASP.NET 已经提供的会话状态选项之一,所以我个人认为这会浪费时间。
在其他应用程序中使用(EG 桌面)
目前,我的应用程序是纯粹基于 Web 的,但我计划让桌面程序能够与同一个数据库进行交互。如果数据库有大量元数据被 Web 应用程序用于存储状态,我的桌面应用程序需要知道这一点以避免任何错误(IE 我的桌面应用程序需要知道它必须设置实体状态为“有效”,以便 Web 应用程序不会在一天结束时删除该实体,因为它认为它是无效的)。
概括
那么有没有人有关于如何最好地使用数据库来存储应用程序状态的任何信息或提示?
- 数据库选项那么常见吗?
- 它是否适合具有大量实体的大型应用程序?
- 是否有任何性能影响?
编辑
为了清楚起见,我知道在 ASP.NET MVC 应用程序(TempData、缓存和会话)中管理状态存在其他选项,但我对有关使用数据库管理状态的信息特别感兴趣。
请不要对任何提到其他选项的人投反对票,因为我最初的问题可能对此并不清楚。