在MVC中,为什么模型会通知视图,为什么视图应该具有模型?

时间:2011-08-05 18:49:10

标签: model-view-controller design-patterns

在我的世界中,模型仅通知订阅模型事件的控制器。然后控制器告诉视图要做什么,例如向列表添加新行。

与视图相同:视图通知控制器订阅了视图的事件。然后控制器根据需要修改模型,例如设置人名,并在模型上调用Save()方法。

好吧,我知道我错了,我不认为每篇关于MVC的文章都是错的,因为我在想另一种方式。 MVC中的要点是从数据模型中分离UI。当视图和模型相互接触时,这是如何实现的?他们为什么要这样做?

感谢您的回答!

3 个答案:

答案 0 :(得分:2)

我完全赞同你这个。

对于我工作的每个项目,我都试图强制执行:

查看 - >控制器 - >模型

以便视图中的每个操作或事件都调用特定的控制器方法。这个控制器方法将完成他的工作(验证,调用其他服务等),然后如果需要持久性,它将调用关联的ModelService来持久化数据。

在我的世界中,视图组件永远不应该通过控制器调用ModelService。

但那只是我;-)(和我合作的几乎100%的优秀建筑师和设计师)

答案 1 :(得分:1)

模型 - 视图 - 控制器被许多人看作不同的方式,但我喜欢将其视为几种其他模式的组合而不是单一模式。这最初可能来自this note

视图与模型的连接是观察者模式,模型在更改时通知视图。控制器不需要参与其中。

答案 2 :(得分:0)

我喜欢将模型视为透明的东西,坚持某种方案。很容易通过视图“阅读”。在你可以调用各种方法的意义上,我从来没有让我的观点具有程序性。通常我的视图是HTML,我的模型有方法,但也能够将自己呈现为普通的数据结构,并且有一个中间版:以模板引擎的形式。

但是,MVC有很多变种。我不认为有2个开发人员确切地,确切地同意MVC实际上是什么。在我看来,MVC是一种帮助你的模式。通过精确地定义最后一点你必须做的事情,这并不是试图保持创造力的法律。