【问题标题】:MVC vs. Observer PatternMVC 与观察者模式
【发布时间】:2010-09-23 09:41:06
【问题描述】:

我最近在 StackoverFlow 上问了一个关于 MVC 的问题:Can the MVC Design Pattern / Architectural pattern be used in Desktop Application Development?

根据提供的答案,我开始研究如何在 Windows 窗体应用程序中实现这一点。我发现了以下 CodeProject 文章:http://www.codeproject.com/KB/cs/model_view_controller.aspx

在文章下方的 cmets 中,某些用户认为(尽管这是一篇好文章)它实际上是观察者模式。 首先,但不太重要的问题是,是否有人同意或不同意这一点,为什么?

关于第二个也是更重要的问题:我正在尝试在 .NET 中构建一个小型任务列表程序。它会非常小,希望很快。 一般来说,对于这样的项目,什么是更好的架构?观察者模式还是 MVC 模式?还是其他模式?

谢谢

【问题讨论】:

  • @Mark:感谢您修复标题。我不敢相信我没有看到! :-)
  • 那些不知道什么是观察者模式的用户。

标签: winforms model-view-controller design-patterns observer-pattern


【解决方案1】:
【解决方案2】:

(本文不是 MVC AFAIK 的示例,原因很简单,因为没有控制器。如果您问我,它更接近 .net 数据绑定。)
MVC 不是观察者模式。 MVC 关注关注点分离。模型、视图和控制器都做一项工作,并信任其他人做他们的工作。在某种程度上,控制器“指导”视图并告诉它如何对更改做出反应(纯 MVC)。控制器还与模型进行适当的交互(其职责是封装数据并强制执行约束/规则)。在 MVC 中,控制器是所有活动的起点——用户输入首先由控制器接收。但是也有像 MVP 这样的变体,其中用户输入首先由视图接收,然后推送/与演示者同步。

观察者模式是你想要观察另一个对象状态变化的地方。所以你可以说 .net 事件遵循观察者模式

如果它真的很小,忘记模式,只需编写代码而不用担心架构......遵循良好设计的启发式/原则

如果您遇到设计问题或开始变得一团糟,那么请引入模式营。

【讨论】:

  • 对我来说,“观察”控制器的是视图(控制器在发生某些事情时通知视图)并告诉它如何对更改做出反应。
  • @DranDane - 正确。在 MVC 中,控制器是一切的发起者。在 MVP 中,演示者观察视图。视图上的用户操作触发程序。已更新。
【解决方案3】:

我同意这篇文章不是 MVC。它更多的是观察者模式的实现。 .NET 中的观察者模式可以通过使用事件来实现,本文就是这种情况。

MVC 需要一个控制器类来控制在模型或视图发出请求时要执行的操作。应用 MVC 是一种非常好的编程实践,因为它极大地促进了关注点分离。使用 mvc,您将拥有一个更简洁、更可扩展和更可测试的应用程序。还有一点需要注意,您仍然可以将观察者模式应用于 MVC 应用程序。它们不会相互矛盾。

============

回答您的第二个问题:哪种模式最好?我认为你处理软件开发的方式是相当错误的。你不应该太担心这些事情,直到你遇到问题。例如如果这个对象改变了状态,我需要这些其他对象对其做出反应,因此我将实现一个观察者模式。

如果我是你,我会先从模特开始,然后从那里拿东西。

【讨论】:

    猜你喜欢
    • 2013-03-11
    • 2014-10-14
    • 2012-09-02
    • 2015-02-12
    • 2014-05-15
    • 2016-02-20
    • 2023-04-10
    • 2012-07-09
    • 1970-01-01
    相关资源
    最近更新 更多