キュー付きカプセル化DOMツリー

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インターフェイスは難しい。