我正在研究一个树形结构的存储,我们目前使用事务方法来修改树形结构。我一直认为使用命令模式是合适的。不过,我只是改变了一个小问题,我喜欢它(返回位于插入节点事务实例(除了属性)):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