私はツリー構造のストレージで作業していますが、現在はトランザクションメソッドを使用してツリー構造を変更しています。私はいつもコマンドパターンの使用が適切だと思っていました。しかし、私はほんの少しの行動を変えて、私は(()属性を除いて挿入されたノードに配置されたトランザクションのインスタンスを返す)それが好き:APIデザイン/コマンドパターンと "通常の実装"
wtx.insertText(EInsert.ASRIGHTSIBLING, "value").insertElement(EInsert.ASRIGHTSIBLING, new QName("bla").insertElement(EInsert.ASFIRSTCHILD, new QName("blubb")).insertAttribute(new QName("foo"), "bar").insertAttribute(new QName("bar"), "foo"));
を、私はこの方法は非常にいいです操作を連鎖すると思うが、私たちの取引が提供します(moveTo(long)
、moveToParent()
、moveToFirstChild()
...)の現在のトランザクションインスタンスの代わりにブール値を返すカーソルのようなメソッドがありますが、これは避けることはできません。私は少しより冗長ですが、まあ、それは「サポート」オープンでしょう
new InsertText(EInsert.ASRIGHTSIBLING, "value").execute(wtx);
new InsertElement(EInsert.ASRIGHTSIBLING, new QName("bla")).execute(wtx);
...
だろうコマンドパターンについて考えしかしそれ以外の私たちも、面倒な
wtx.method();wtx.method();wtx.method();
なし間の移動を行うことができます/本当に素敵な閉じた原則。
あなたはどう思いますか?
「ビルダーを使用するという考えは、基礎となる実装から複合トランザクションの構築を抽象化することでしょうか?」木構造自体は巨大な複合オブジェクト( "ポインタ"を持つ)です。努力する価値があるかどうかはわかりません。私たちは内部的にこのメソッドを頻繁に使用していますので、コードを書き直す必要があります。しかし幸運にも私たちには今のところ外部ユーザーがいません;-)だから私は事実上何かを変えることができ、きれいでいいAPIを提供したいと思います。 – Johannes
ところで:通常は、XML文書などから何らかのインポートを行い、Java APIやXQuery Updateなどで多少の変更を加えます。 – Johannes
@Johannes - コンポジットは一般的にビルダーを使用して構築されます。したがって、ツリー構造がドキュメントまたは単一のデータソースではなく複合オブジェクトとして表示される限り、考慮する価値があります。アイデアは、あなたが適切な創造が保証されるように監督に建設を抽象化することです。 – Joe