java - API设计/命令模式与 "normal implementation"

标签 java api design-patterns

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

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()...) 返回 boolean 值而不是当前事务实例,但我认为这是无法避免的。否则我们甚至可以在之间进行移动而无需麻烦

wtx.method();wtx.method();wtx.method();

但是我想到了命令模式

new InsertText(EInsert.ASRIGHTSIBLING, "value").execute(wtx);
new InsertElement(EInsert.ASRIGHTSIBLING, new QName("bla")).execute(wtx);
...

这有点冗长,但是,它会“支持”开放/封闭原则,这非常好。

那么,你觉得怎么样?

最佳答案

对我来说,树结构听起来像是一个巨大的复合对象。由于您还要处理构建事务,因此我认为使用命令模式是合适的,但您应该考虑将您的execute()调用包装在某种导演中(如果可能的话),这样您就可以将命令和生成器模式混合在一起.

public void directorMethod(Object wtx) {
  InsertText(EInsert.ASRIGHTSIBLING, "value").execute(wtx);
  InsertText(EInsert.ASRIGHTSIBLING, "blah").execute(wtx);
}

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

关于java - API设计/命令模式与 "normal implementation",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10383370/

相关文章:

javascript - 如何使用 SoundCloud API 添加上一个和下一个按钮

c# - ASP.NET Core Web API 500 内部服务器错误

PHP REST API 路由

c# - 依赖注入(inject)的方式

java - 为什么这个功能接口(interface)有效

java - python 相当于 java 中的 HttpClient 和 sql 查询

java - 将 Java 文件中的 ArrayList 值映射到 JSP 文件中的 HTML 对象

java - Eclipse - 允许死锁运行时选项

java - 具有静态内部类的构建器模式与具有一个抽象和一个+具体实现的构建器设计模式有什么区别

c++ - 如何处理多个 Action 和异常