【发布时间】:2015-11-24 01:40:50
【问题描述】:
我现在正在学习MVC,我刚刚知道当控制器修改模型时,它可以通知视图更新模型中的数据。虽然我对此很困惑。由于模型是由控制器而不是它自己或其他东西修改的,所以应该是控制器向视图发送更新通知。我也没有找到任何模型到视图通信的例子,如果有人理解这个想法,请给我一个说明。
【问题讨论】:
标签: design-patterns model-view-controller
我现在正在学习MVC,我刚刚知道当控制器修改模型时,它可以通知视图更新模型中的数据。虽然我对此很困惑。由于模型是由控制器而不是它自己或其他东西修改的,所以应该是控制器向视图发送更新通知。我也没有找到任何模型到视图通信的例子,如果有人理解这个想法,请给我一个说明。
【问题讨论】:
标签: design-patterns model-view-controller
模型到视图的通信通常通过观察者模式完成。视图中的代码往往比模型中的代码变化更多,因此模型-视图分离意味着模型元素不直接依赖于视图元素。您可以添加或更改视图代码,模型代码不受影响。
状态改变的模型元素只会通知它的所有观察者。状态变化可能是由于控制器或其他原因(值随时间变化)而发生的。
请参阅https://msdn.microsoft.com/en-us/library/ff649643.aspx,尤其是以下内容:
(来源:s-msft.com)
【讨论】:
MVC 的核心组件model 根据问题域捕获应用程序的行为,与用户界面无关。 model 直接管理应用程序的数据、逻辑和规则。 view 可以是信息的任何输出表示,例如图表或图表。
第三部分,controller,接受输入并将其转换为model 或view 的命令。
通常controller 接收用户输入,例如按键和鼠标点击,并基于此修改model。当model 更改时,view 需要更新以反映更改。
有几个选项可以实现view 更新。
A) view 更新可以通过在修改model 后直接从controller 调用来实现。示例见here。
B) view 更新可以使用Observer 模式实现。在这种情况下,每次model 发生相关更改时,model 都会在view 上触发更新事件。示例见here。
【讨论】: