一旦我有关于devise的讨论,相对于命令模式。 我的同事说,在调用.execute()方法之后,命令对象不应返回状态(成功,失败,为什么)。 原因是你不应该担心命令是否被执行,因为命令不能包含任何状态。 但是,如果命令具有预期的效果,则必须在调用之后进行检查。 他提出的另一个观点是,在四人帮上,指挥模式并没有出现这种情况(返回状态)。 我声明了相反的观点。 GoF没有提供这种情况,但是一个模式可以模拟您的需求。 如果命令不成功,调用客户端必须接收状态certificate,并最终部署适当的响应。 通过强制客户检查行动取得成功是否容易出错,并产生重复的代码。 此外,在某些情况下,命令会产生一个结果(例如,一个命令添加一条线到一个情节,将以某种方式将行ID返回到客户端),假装没有状态的命令意味着你必须从数据模型中“捞出”新的对象标识符。 最后,我们通过不返回状态而达成了一个妥协,但将新创build的对象的id保存在命令对象中,而且应用程序工作得很好,但是我现在好奇地知道你的意见。
战略模式和命令模式有什么区别? 我也在Java中寻找一些例子。
我正在研究命令devise模式 ,我对使用它的方式感到困惑。 我有的例子是关于远程控制类,用来打开和closures灯。 为什么不应该使用Light类的switchOn()/ switchOff()方法,而不是使用最终调用switchOn / switchOff方法的单独的类和方法? 我知道我的例子很简单 ,但这是重点。 我无法在Internet上的任何位置find任何复杂的问题,以查看命令devise模式的确切用法。 如果你知道你解决的任何复杂的现实世界问题,可以使用这种devise模式解决,请与我分享。 这有助于我和这篇文章的未来读者更好地理解这种devise模式的用法。 谢谢 //Command public interface Command { public void execute(); } //Concrete Command public class LightOnCommand implements Command { //Reference to the light Light light; public LightOnCommand(Light light) { this.light = light; } public void execute() { light.switchOn(); //Explicit call of selected class's method […]
我一直在寻找一个很好的解决scheme来解决典型的Repository模式(针对特定查询的不断增长的方法列表,请参阅http://ayende.com/blog/3955/repository-是新的单身人士 )。 我非常喜欢使用Command查询的想法,特别是通过使用Specification模式。 然而,我的规范问题是它只涉及到简单select的标准(基本上是where子句),并没有处理查询的其他问题,如连接,分组,子集select或投影等。基本上,所有额外的许多查询必须经过以获得正确的数据集。 (注意:我在命令模式中使用了“命令”这个术语,也称为查询对象。我不是在命令/查询分离中讨论命令,在查询和命令之间有区别(更新,删除,插)) 所以我正在寻找封装整个查询的替代scheme,但是仍然足够灵活,以至于您不只是换取意大利面条仓库来获取命令类的爆炸式增长。 我已经使用了Linqspecs,虽然我发现能够为select标准分配有意义的名称是有价值的,但这还不够。 也许我正在寻求结合了多种方法的混合解决scheme。 我正在寻找其他人可能已经开发的解决这个问题的解决scheme,或者解决不同的问题,但是仍然满足这些要求。 在链接的文章中,Ayendebuild议直接使用nHibernate上下文,但是我觉得这在很大程度上使业务层复杂化,因为它现在还必须包含查询信息。 等待一段时间后,我会提供一个赏金。 所以,请让您的解决scheme赏金值得,好的解释,我会select最好的解决scheme,并upvote亚军。 注:我正在寻找一些基于ORM的东西。 显然不一定是EF或nHibernate,但这些是最常见的,并且最适合。 如果它可以很容易地适应其他ORM的,这将是一个奖金。 Linq兼容也不错。 更新:我真的很惊讶,这里没有很多好的build议。 看起来好像人们完全是CQRS,或者他们完全在版本库里。 我的大多数应用程序都不够复杂,不能保证CQRS(大多数CQRS提倡者都表示不应该使用它)。 更新:这里似乎有点混乱。 我不是在寻找新的数据访问技术,而是在业务和数据之间devise合理的界面。 理想情况下,我正在寻找的是查询对象,规范模式和存储库之间的某种交叉。 正如我上面所说,规范模式只处理where子句方面,而不是查询的其他方面,如连接,子select等。存储库处理整个查询,但一段时间后失控。 查询对象也处理整个查询,但我不想简单地用查询对象的爆炸replace存储库。
这两种devise模式都封装了一个algorithm,并将实现细节从其调用类中分离出来。 唯一的区别是我可以看出,战略模式需要参数执行,而命令模式不。 在我看来,命令模式要求创build时所有的执行信息都是可用的,并且能够延迟其调用(可能作为脚本的一部分)。 什么决定指导是否使用一种模式或另一种模式?
对不起,我找不到回答这个问题,我几乎可以肯定其他人之前提出过这个问题。 我的问题是,我正在编写一些系统库来运行embedded式设备。 我有可以通过无线电广播发送到这些设备的命令。 这只能通过文字完成。 在系统库里面我有一个线程来处理看起来像这样的命令 if (value.equals("A")) { doCommandA() } else if (value.equals("B")) { doCommandB() } else if etc. 问题是,有很多的命令会迅速旋转到失去控制。 可怕的看出来,痛苦的debugging,并在几个月的时间内令人难以理解。