MVC模式中的控制器与Command模式中的命令有什么区别?

时间:2012-04-02 14:15:42

标签: design-patterns

有时我认为Controller和Command是相同的,因为它们都封装了业务逻辑。我能想到的唯一区别是命令必须有一个没有参数的execute()方法,但控制器的execute()方法可以接受参数。或者我错了吗?

2 个答案:

答案 0 :(得分:1)

这有点像将苹果与橙子进行比较。从概念上讲,命令是一种设计模式,但控制器是元设计模式的一部分。这意味着它们不是互斥的或包容性的。控制器可以由命令(甚至命令集合)组成。 MVC有很多种,控制器在许多方面的职责略有不同,但通常控制器严格用于将用户输入转换为应用程序数据(模型)。在大多数MVC版本中,它还负责在模型更改时更新视图。 通常控制器是长寿的。只要存在某个模型和/或视图,它们就存在,或者如果它们具有视图/模型注册系统,它们甚至比它们更长。

另一方面,命令在理论上是无状态的,它做它的事情然后被释放用于垃圾收集。实际上,命令的执行时间可能比执行方法的执行时间长一些,这样可以更轻松地实现异步操作。但命令应始终严格关注一个且只有一个任务,当它完成时它们应该消失。

答案 1 :(得分:0)

差异很大:

  • 在MVC(模型视图控制器)中,“控制器”告诉“视图”存储在“模型”中的内容,并且还存储用户对“视图”所做的更改。 “模型”中的每个更改都会通知“视图”。模型可以是xml文件,数据库等。“视图”的示例是GUI。 HERE您可以阅读更多mvc模式。

  • 在命令模式中,“command”对象在不知道调用者的情况下执行操作。 HERE有一个简单的切换器示例。切换器可以打开/关闭灯泡,也可以打开引擎或其他东西..

我希望自己清楚明白