CRUD操作のCRは同期、UDは非同期(キューされる)。UDを編集操作と呼ぶ。
例:
- 同期の場合: Node oldChild = node.removeChild(child)
- 編集リクエスト RequestId id = node.requestEdit(REMOVE_CHILD, child)
- 変更イベント childRemoved(id, node, oldChild)
編集メソッドを呼び出す代わりに、対応する編集リクエストを行う。戻り値の代わりに変更イベントを受け取る。addEventListener(type, listener, options) と requestEdit(method, args...) が基本になる。
requestEditで、編集リクエストはキューに置かれる。キューイングした順に実行されるとは限らないが、いずれは実行され、結果はイベントを確認すればわかる。編集が失敗することはある、それはしょうがない。
失敗しないで実行されたリクエストは削除されないで、すべて記録される。編集リクエスト列は、そのまま編集ログになる。よって、無限UNDOが可能となる。パーシステントストレージに保存すれば、過去に起動されたときの実行もUNDOできる。人に分かりやすいUNDO/REDOのインターフェイスは難しい。