MVC与观察者模式

时间:2008-11-21 05:11:27

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

我最近在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

在文章下面的评论中,某些用户认为(虽然这是一篇好文章)但它实际上是观察者模式。 首先,但不那么重要,问题是,是否有人同意或不同意这一点以及为什么?

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

谢谢

3 个答案:

答案 0 :(得分:4)

答案 1 :(得分:3)

(这篇文章不是MVC AFAIK的一个例子,原因很简单,就是没有控制器..如果你问我,它更贴近.net数据绑定。)
MVC不是Observer模式。 MVC关注的是关注点的分离。模型,视图和控制器都做一个工作,并相信其他人做他们的工作。在某种程度上,Controller'指示'视图并告诉它如何对变化作出反应(Pure MVC)。控制器还适当地与模型交互(其职责是封装数据并强制执行约束/规则)。在MVC中,控制器是所有活动的起点 - 控制器首先接收用户输入。然而,存在诸如MVP的变体,其中用户输入的信息首先由视图接收,然后与演示者推送/同步。

观察者模式是您希望观察另一个对象以进行状态更改的位置。所以你可以说.net事件遵循观察者模式

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

如果你遇到设计问题或者它开始变得混乱,那就引入模式营。

答案 2 :(得分:1)

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

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

===========

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

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