首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >API设计/命令模式与“正常实现”

API设计/命令模式与“正常实现”
EN

Stack Overflow用户
提问于 2012-04-30 20:01:53
回答 1查看 466关注 0票数 0

我正在研究一个树型结构的存储,目前我们使用事务方法来修改树型结构。我一直认为使用Command模式是合适的。但是,我只是更改了一个小行为,并且我喜欢它(返回位于插入节点的事务实例(属性除外)):

代码语言:javascript
运行
复制
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()...)它返回布尔值而不是当前的事务实例,但我认为这是无法避免的。否则我们甚至可以在没有麻烦的情况下进行移动

代码语言:javascript
运行
复制
wtx.method();wtx.method();wtx.method();

但是,我考虑的命令模式是

代码语言:javascript
运行
复制
new InsertText(EInsert.ASRIGHTSIBLING, "value").execute(wtx);
new InsertElement(EInsert.ASRIGHTSIBLING, new QName("bla")).execute(wtx);
...

这有点冗长,但它将“支持”开放/关闭原则,这真的很好。

那么,你怎么看?

EN

回答 1

Stack Overflow用户

发布于 2012-04-30 20:18:34

对我来说,树结构听起来就像一个巨大的复合对象。由于您还在处理构建事务,我认为使用Command模式将是合适的,但如果可能,您应该考虑将execute()调用包装在某种类型的director中,以便在可能的情况下将Command和Builder模式混合在一起。

代码语言:javascript
运行
复制
public void directorMethod(Object wtx) {
  InsertText(EInsert.ASRIGHTSIBLING, "value").execute(wtx);
  InsertText(EInsert.ASRIGHTSIBLING, "blah").execute(wtx);
}

注意,void return可以是您的树结构,wtx参数可以是事务和/或树结构,我不一定确定您希望如何执行此操作。使用Builder的想法是从底层实现中抽象出组合事务的构建。这样,如果您需要更改底层命令,您应该能够这样做并进行原子测试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10383370

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档