1 つのウィンドウで編集し、同時に別のウィンドウで使用できる一連のドメイン オブジェクトがあります。オブジェクトが常に有効な状態にあり、コミットされるまで変更が外部に表示されないようにするため。オブジェクトはリポジトリに保存されます (各オブジェクトには一意の ID があります)。
- ユーザーが「実行」ウィンドウを開く (オブジェクト A への読み取り専用アクセス)
- ユーザーが「編集」ウィンドウを開く (オブジェクト A への読み取り/書き込みアクセス)
- ユーザーは UI で一部のプロパティを変更しますが、[適用] をクリックしません
- ユーザーは実行ウィンドウの「実行」ボタンをクリックします。実行操作は「古い」設定で実行する必要があります。
- ユーザーは、編集ウィンドウで「適用」ボタンをクリックし、実行ウィンドウで実行します。実行操作は「新しい」設定で実行されます。
いくつかの解決策を考えることができますが、どちらにもあまり満足していません。
- リポジトリからオブジェクトをチェックアウトすると、常にクローンが返されます。変更を保存したい場合は、オブジェクトをリポジトリに明示的にコミットする必要があります。これは小さなオブジェクトにはうまく機能しますが、オブジェクト モデルが大きい場合、すべてを複製するのは妥当ではないかもしれません。
- ビュー モデルまたはモデルは中間の変更を格納し、ユーザーが変更を適用する必要があると判断するまで、基になるドメイン オブジェクトを変更しません。これは少し面倒に思えますし、ビューモデルに多くの検証ルールを必要とし、それをドメイン オブジェクトに含める必要があります。
- UI は、ドメイン オブジェクトに対して直接機能しません。むしろ、ユーザーが変更を適用するときにドメイン オブジェクトに適用できる DTO を変更します。
同時編集者は 1 人だけですが、複数の同時「閲覧者」が存在する可能性があることに注意してください。また、同時実行性も問題になりません (マルチスレッド環境でオブジェクトが部分的に更新されるという意味で)。
変更がコミットされるまで、変更を適用せずにドメイン オブジェクトを編集するためのパターンを実装するにはどうすればよいでしょうか? 私が調べるべきフレームワークはありますか?