问题标签 [command-pattern]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
4013 浏览

java - 命令模式 - 返回一个值

我正在使用命令模式通过 TCP/IP 套接字将命令从客户端传递到服务器。服务器将获取命令对象,对其进行反序列化,然后在命令对象上调用 execute()。但是,我需要通过套接字将一个值传回给调用者。命令模式是否允许这样做?如果没有,是否有解决方法?我看过维基百科上的电灯开关示例,这很棒,但没有返回值。非常感谢任何建议。

0 投票
1 回答
686 浏览

c# - DDD 命令模式实现细节 - 持久化命令

我有一个设计,我希望能够将一个或多个命令对象分配给一个实体,然后它将这些命令用作其工作流程的一部分。为了争论,将附加功能分配给用户帐户之类的东西。

我了解命令模式以及它如何适合,但我的问题是持久性之一。如果我有一个命令列表,其中每个用户帐户都可以有自己的命令列表,并且为了论证,我们假设该命令唯一重要的是它的系统类型,和/或它们都具有相同的属性。在实现我的数据层时,坚持这一点的最佳方法是什么?

我正在考虑将其视为帐户表和命令/功能表之间的多对多关系,其中后一个表遵循 TPH 策略(即所有命令都保存在同一个表中)。这似乎是最干净的方式,但我想看看是否有其他人遵循不同的策略?

您是否改为将其设为 1: many 关系,其中添加了相同功能的任何两个帐户具有该功能的不同实例?或者有没有更好的方法,我根本没有想到?

0 投票
3 回答
1153 浏览

c++ - C++中的命令模式序列化

我想在 C++ 中执行以下操作:

  1. 创建命令对象
  2. 序列化它
  3. (将其发送到另一台计算机)
  4. 反序列化
  5. 执行

两种情况:

  • 发送者和接收者都是win 7电脑
  • 发件人是 *nix,收件人是 win 7

我找到了一个序列化教程:http ://www.functionx.com/cpp/articles/serialization.htm 。这是要走的路吗?在python中我可以这样做:

在这段代码中,重点是pickle.dump 和pickle.load。什么是 C++ 对应物?维基百科说c++不支持序列化?那么上面的链接是什么?

二进制序列化是什么意思?内存被转储到磁盘并且反序列化需要完全相同的计算机(没有跨平台传输)?

兄弟,朱哈

0 投票
1 回答
658 浏览

gwt - 带有命令模式的 GWT RequestFactory

您当前是否将命令模式与 RequestFactory 结合使用?我想使用它,但由于 RequestFactory 不允许继承,我不知道该怎么做。

如果有人经历过这个问题并找到了实现它的方法,我很高兴知道。

谢谢!

0 投票
1 回答
1136 浏览

xaml - 在 ListBox 和 ContextMenus 中使用不同的数据绑定源

这是 XAML:

好的,所以 ListBox 的 ItemSource 绑定到 VM 中的 Documents 集合并正确呈现标题和 ID

上下文菜单的 ItemSource 绑定到 VM 中的 CategoryList 集合并正确呈现类别列表。

我遇到的问题是命令绑定:

由于已经设置了 ContextMenu 的 ItemSource,它会尝试从 CategoryList 中获取 AddDocumentToCategoryContextMenuCommand。显然该命令不存在,它是VM的成员。

我不希望对 XAML 中的 VM 或模型有任何引用。一切都是使用 Unity 构建的,VM-View 在 App.xaml 中关联:

如何从 ContextItem 中将数据绑定到 VM 的成员。

谢谢。

更新的编辑 #1 从这里开始

这是更新的 xaml(但仍然无法正常工作,但获得了一些见解):

我有这个示例适用于不使用 ContextMenu 的简单示例。看起来 ContextMenu(即使附加到 ListBox)不是用户控件可视树的一部分。绑定总是返回 null / not found。我认为 ContextMenu,因为它是一个浮动“窗口”,是在它自己的树中构造的,因此无法找到 ListBox 调用“结果”以访问 ListBox 的 DataContext。

对此有什么想法吗?有关如何处理的任何建议?

编辑#2 从这里开始

如果您想知道,请找出具有约束力的问题的答案:

此绑定有效:

希望这可以帮助其他有同样问题的人。

最后一次更新以确保完整性。

为了让命令知道单击了哪个上下文菜单项,我不得不稍微更改 xaml(愚蠢的疏忽):

再次,希望这对其他人有所帮助。

0 投票
1 回答
1070 浏览

gwt - gwt-dispatch - GWT 的命令模式替代方案

在 GWT 项目中是否可以使用gwt-dispatch的替代方法?

0 投票
4 回答
519 浏览

design-patterns - 对命令模式感到困惑

我目前正在学习软件设计课程。我自己从来没有真正擅长设计软件系统,所以我认为这是弥补我的弱点的明智之举;)

我试图了解命令模式是如何工作的。我已经到处寻找例子,但我仍然感到困惑。模式中每个类的职责是什么?ConcreteCommands 是否实际执行操作,或者它们是否携带必要的信息并将其发送到适当的目的地以实际执行?

0 投票
2 回答
311 浏览

apache-flex - Flex:DataGrid 和命令模式

我正在使用命令模式,因此对对象状态的任何更改都需要在命令执行中发生。DataGrid 中的普通 itemeditor 只会对底层绑定对象进行更改,但我需要拦截该更改并使其使用命令。

我对 flex 很陌生,所以我正在寻找如何实现它的想法。一个基本示例是我有一个带有“日期”字段的对象。在数据网格中,我使用 flex“DateField”组件作为 itemeditor。当我选择一个新日期时,我不希望它更新数据源,我希望它调用一个不同的方法,我可以在其中访问新选择的值并将其传递给一个命令来执行。任何提示将非常感谢。提前致谢。

0 投票
3 回答
1616 浏览

c++ - 使用 shared_ptr 处理可靠的命令模式

我正在尝试在库中实现一个非常干净的命令模式。

我现在有以下结构(一些部分仍在完成中):

  1. 用户(客户端代码)有一些对象,称之为“经理”
  2. Manager拥有一系列shared_ptr<Foo>
  3. Manager通过返回提供对集合的访问shared_ptr<Foo>
  4. 我有一个Command抽象类和一个命令层次结构,用于执行操作Foo
  5. 客户端代码不应该调用Command::execute(),只Manager 应该调用,Manager::execute(shared_ptr<Command>)以便它可以处理撤消/重做

我想遵循以下规则:

  1. 用户(客户端代码)有一些对象,称之为“经理”
  2. Manager拥有一系列shared_ptr<Foo>
  3. Manager通过返回提供对集合的访问shared_ptr<const Foo>
  4. 我有一个Command抽象类和一个命令层次结构,用于执行操作Foo
  5. 客户端代码不能(没有变通方法)调用Command::execute(),只能Manager 调用Manager::execute(shared_ptr<Command>)以便它可以处理撤消/重做并获取非常量智能指针
  6. AManager必须能够允许Command对象访问和修改shared_ptr<Foo>,即使用户Command使用shared_ptr<const Foo>

我只是想找出shared_ptr<const Foo>在允许 5 号和 6 号工作的同时处理捐赠的最佳方式。

有没有我可以学习的示例/设计模式?与我已经拥有/正在从事的工作相比,这是一个好主意吗?

0 投票
4 回答
2393 浏览

design-patterns - 命令模式似乎不必要地复杂(我不明白什么?)

我已经阅读了命令模式,我想我错过了一些东西。Command 对象的存在是为了抽象出 Receiver 对象的细节。在我看来,我们可以简单地停在这里,并持有对 Command 对象的引用以在适当的时间执行适当的方法。

那么,为什么需要调用者呢?这个额外的间接提供了什么好处?我们已经将 Receiver 的详细信息隐藏在了 Command 后面,那么 Command 对客户端也隐藏起来的动机是什么?