ASP.NET MVC3 アプリケーションでの状態の管理について、こことここでいくつか質問があります。回答の 1 つは、これに対するオプションは、各ステップの状態をデータベースに単純に保存することであると述べています。
これが最初に私に提案されたときにいくつかの考えがあったので、これが通常どのように達成されるかについて誰かアドバイスがあるかどうか疑問に思っていました.
無効なエンティティ
3 つのステップを持つマルチステップ フォーム (ウィザード) を考えてみましょう。データベースの各ステップを保存して状態を維持することはできますが、ユーザーがプロセスの途中で Web アプリケーションを閉じて、データベースに無効な状態のエンティティが含まれたままになる可能性があります。
これを克服するために、ウィザードが完了したかどうかを示すフィールドをテーブルに追加できます。一貫性のないアイテムは定期的にレビューされ、必要に応じて自動的に削除されます。たとえば、1 日の終わりにデータベースで無効なエンティティが見つかった場合、それらは自動的に削除されます。
これに関する問題は、アプリケーションに関するメタデータを格納するためにテーブルにフィールドを追加する必要があることです。マルチステップ フォームに入力された情報を格納するすべてのテーブルには、これらのフィールドが必要です。これはどういうわけか私には間違っているようです。解決策の 1 つは、各エンティティ テーブルをメタデータで汚染するのではなく、これを管理するための特定のテーブルを作成することです。
中間データベース
アプリケーションと「実際の」データベースの間にデータベースを配置することを考えました。中間データベースには、各「ステップ」の状態情報を格納するテーブルがあり、最後のステップが完了したときにのみ、この情報が「実際の」データベースに転送されます (一時データは中間データベースから削除されます)。
これは、ASP.NET が提供するセッション状態オプションの 1 つにすでに似ているように思えます。個人的には、これは時間の無駄だと思います。
他のアプリケーションでの使用 (EG デスクトップ)
現時点では、私のアプリケーションは純粋に Web ベースですが、同じデータベースとやり取りできるデスクトップ プログラムを用意する計画があります。Web アプリケーションが状態を保存するために使用する大量のメタデータがデータベースにある場合、デスクトップ アプリケーションはエラーを回避するためにこれを認識する必要があります (つまり、デスクトップ アプリケーションは、設定する必要があることを認識する必要があります)。 Web アプリケーションがエンティティを無効であると見なして 1 日の終わりにエンティティを削除しないように、エンティティを「有効」として状態にします)。
概要
アプリケーションの状態を格納するためにデータベースを最適に使用する方法について、情報やヒントを持っている人はいますか?
- データベースオプションはそれほど一般的ですか?
- 多くのエンティティを持つ大規模なアプリケーションに適していますか?
- パフォーマンスへの影響はありますか?
編集
明確にするために、ASP.NET MVC アプリケーション (TempData、キャッシュ、およびセッション) で状態を管理するための他のオプションが存在することを認識していますが、データベースを使用して状態を管理する方法についての情報に特に関心があります。
私の最初の質問はこれについて明確ではない可能性があるため、他のオプションに言及した人に反対票を投じることは控えてください.