【发布时间】:2010-11-12 09:36:16
【问题描述】:
有一次我讨论了与命令模式相关的设计。 我的同行表示,在调用 .execute() 方法后,命令对象不应返回状态(成功、不成功和原因)。原因是您不应该担心命令是否被执行,因为命令必须不包含任何状态。但是,您必须在调用后检查该命令是否具有预期效果。他认为的另一点是,在四人帮中,命令模式不存在这种情况(返回状态)。
我主张相反的观点。 GoF 不提供这种情况,但可以根据您的需要对模式进行建模。如果命令不成功,调用客户端必须收到状态证明,并最终部署适当的反应。通过强制客户端检查操作是否成功,容易出错并产生重复的代码。此外,在某些情况下,命令会产生结果(例如,在绘图中添加线的命令,会以某种方式将线 id 返回给客户端),并且假装有没有状态的命令意味着您必须从数据模型中“捞出”新的对象标识符。
最后,我们达成了妥协,不返回状态,而是将新创建的对象的 id 保留在命令对象中,无论如何应用程序运行良好,但我现在也很想知道您的意见。
【问题讨论】:
标签: design-patterns language-agnostic command-pattern