最善の戦略は、(ビジネス)プロセスの観点から何が起こるかによって異なります。また、重要な質問は、ユーザーが通常何を期待し、何が最も驚かないか、そしてもちろん、ユーザーが期待することを実装できるかどうかです。
Web経由でファイルを編集する例は、次のように分類できます。
- user1はファイルv0をチェックアウト/取得/ダウンロード/開きます
- user2はファイルv0をチェックアウト/取得/ダウンロード/開きます
- user1は、ファイルv0のコピーに変更を加えます
- user2は、ファイルv0のコピーに変更を加えます
- user1はファイルバージョンv1をサーバーに保存します
- user2はファイルバージョンv2をサーバーに保存します
Webアプリケーション、そして実際には通常のデスクトップオフィスプログラムでも一般的であることに注意してください。ユーザーが行った最新の変更は、保存した後にのみ(他のユーザーが)利用できるようになります。つまり、同僚の入力が表示されることはありません。あなたが編集しているファイルのコピーであなたの上に。
これに対する古典的なバージョン管理アプローチは、user1の場合、通常のデスクトップ編集/保存プロセスと比較して何も変更されないというものです。
ただし、user2の場合、v2をサーバーに保存しようとすると、アプリケーションは、ユーザーが最後にダウンロードしてからファイルバージョンv0に変更があったかどうかを確認する必要があります。この場合、バージョン管理システムは通常、両方のバージョン(v1とv2)を画面に並べて表示し、それらを混合して、結果のバージョン(v3)をサーバーに保存します。
テキストファイルの場合、編集されたファイルの領域が重複しない場合に変更が自動的にマージされるように、プロセスを自動化しようとする多くのツールとシステムがUnixとWindowsの両方に存在します。
別の方法は、user1が編集を終了するまでuser2のファイルをロックすることです。
通常、編集をトランザクションに入れることは重要ではありません。重要なのは、既存のファイルを新しいバージョンで上書きしようとする最後の操作です。編集は各ユーザーのワークステーションで個別に行われ、最後のポイント(保存)までサーバーにアクセスしません。
ちなみに、あなたの例は、飛行機のチケットの予約や医者への予約など、別の状況とは明らかに異なります。
チケットを予約する場合、飛行機の座席数には限りがあります。複数の人が飛行機の同じ最後の座席に予約を入れるためにデータ転送が実際に瞬時に行われるわけではないという事実のために、それは可能です。
したがって、予約は少なくとも2段階のプロセスである必要があります。
- システムは空きスロットを表示します。
- ユーザーが空きスロット(s1)の1つを要求します。
- システムは、スロットが本当にまだ空いているかどうかをユーザーに通知し、空いている場合は予約します。
- ユーザーが予約を完了します。
「本当にまだ無料」の手順は、通常、Webページのユーザービューに関する情報がリアルタイムで更新されないためです。したがって、手順1と2の間に、別のユーザーが空きスロットを申請した可能性があります。