我正在研究一個樹形結構的存儲,我們目前使用事務方法來修改樹形結構。我一直認爲使用命令模式是合適的。不過,我只是改變了一個小問題,我喜歡它(返回位於插入節點事務實例(除了屬性)):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()
...),它們返回的是布爾值而不是當前的事務實例,但我認爲這是無法避免的。否則,我們甚至可以做之間移動無需繁瑣的
wtx.method();wtx.method();wtx.method();
但是我想到這將是
new InsertText(EInsert.ASRIGHTSIBLING, "value").execute(wtx);
new InsertElement(EInsert.ASRIGHTSIBLING, new QName("bla")).execute(wtx);
...
這是更詳細一點,但好,這將「支持」打開命令模式/封閉的原則,這是非常好的。
所以,你有什麼感想?
你是什麼意思?「使用Builder的想法是從基礎實現中抽象複合事務的構建。」?樹結構本身是一個巨大的複合對象(帶有「指針」)。我不確定是否值得努力。我們經常在內部使用這些方法,並且我將不得不重寫一堆代碼。但幸運的是,我們現在沒有任何外部用戶;-)所以我可以改變任何事情,我想提供一個乾淨漂亮的API。 – Johannes
順便說一句:通常你會使用某種導入(例如從XML文檔),然後使用Java API或者某天使用XQuery Update或類似的東西做一些更改。 – Johannes
@Johannes - 複合材料通常使用建築師來建造。所以只要樹結構被視爲一個複合對象而不是一個文檔或一個數據源,這是值得考慮的。這個想法是把建築抽象成一個導演,這樣你就可以保證正確的創作。 – Joe