web-dev-qa-db-ja.com

ウィザード形式では、データはすべてのステップの最後にサーバーに保存する必要がありますか、それとも各ステップの完了時に保存する必要がありますか?

私は自分のフォームで作業するための2つのアプローチを考えています。

  1. ユーザーがすべての手順を完了したら、すべてのデータをサーバーに送信します。
  2. ユーザーが1つの手順を完了するたびにデータをサーバーに保存します。

具体的には、私のウィザードは、基本情報、アドレス、画像のアップロードの3つのステップで構成されています。これらの各ステップは、独自の画面に値する多くの操作で構成されています。

オプション1では、ユーザーが入力に費やしているすべてのデータを失うという手順中に事故が発生するのではないかと心配しています。

オプション2では、手順中に事故が発生してごみデータが発生するのではないかと心配しています。

各オプションについて他に気にする必要があることはありますか? 2つのオプションで技術的な問題が発生しないとしたら、どのアプローチを採用すればよいですか?

あなたのすべての助けに感謝します!

8
tiengtinh

それはあなたの要件に基づいています。

ユーザーがすべての手順を完了したら、すべてのデータをサーバーに送信します。

要件に応じてユーザーのすべての情報(基本情報、住所、アップロード画像)が必要な場合は、これが最適なオプションです。

あなた自身のために考えてください、あなたはあなたのサーバーに3セットのデータを送るつもりです。次に、次のうちどれが最適ですか? a)最初のセットを送信、2番目のセットを送信、3番目のセットを送信(合計3つのサーバー呼び出し)b)ウィザードの最後まですべてのデータを一時的に保存し、3つのデータセットすべてをサーバーに送信(1つのサーバー呼び出し) )

明らかに、オプション(b)が選択するのに最適です。

途中で何らかの事故(予期しないエラー)が発生しても、不完全なデータまたは半分のデータをデータベースに格納するだけでは意味がありません(すべての情報が必要なため)。ユーザーがフィールドの情報を保持する(viewstateを維持する)だけで入力を続行し、サーバーに送信してウィザードの最後に情報を保存することをお勧めします。

ユーザーが1つの手順を完了するたびにデータをサーバーに保存します。

すべての情報が必須ではなく、特定のデータセット(任意のデータセット)の場合、各ステップの最後にそれらをサーバーに送信できます。

途中で事故が発生した場合、データベースに1つまたは2つのデータセットが格納されている可能性があります。そのため、ユーザーがプロセスを再試行するときにオプションをユーザーに提供します。私はそれが退屈であることを知っていますが、彼にすべての情報をもう一度尋ねることより間違いなく優れています。これは実際には良い方法ではありません。最初のアプローチで簡単に最適化できる非常に多くのサーバー呼び出しによってパフォーマンスが大幅に影響を受ける可能性があるためです。

結論:前述のとおり、答えは要件に基づいています。したがって、ビューステートを処理するだけであれば(すべてのフィールドでユーザー入力を維持します)、それはまったく問題ありません。パフォーマンスに基づいて、最初の選択肢をお勧めします "ユーザーがすべてを完了したときにすべてのデータをサーバーに送信する)手順

5

私は、バックエンドにごみデータ(取り除くことができる)があるリスクは、ユーザーが壊滅的なクラッシュによってデータの一部を失うリスクよりもはるかに許容できると思います。

さらに、データがあることは、以前に入力された入力を事前に入力することでユーザーエクスペリエンスを支援するのに十分に役立ちます。

さらに、ユーザーの一部のデータ(顧客のメールアドレスなど)を取得できる場合でも、この情報を使用してアクションを実行できます(ニュースレターのメール送信、または「サインアップを終了するように求める」など)。

6
Bryce