MVC - Codeigniter - 查看与模型的对话

时间:2012-10-31 22:09:30

标签: php codeigniter database-abstraction

在我在围绕MVC架构的StackOverflow上看到的大多数帖子中,人们都说模型应该只与控制器通信,而不是从视图中传达。

我对此有点困惑,因为当你使用谷歌MVC时: - http://en.wikipedia.org/wiki/Model%E2%80%93view%E2%80%93controller - http://i.msdn.microsoft.com/dynimg/IC108622.gif 图形似乎表明从视图直接到模型的通信。

我想知道的具体应用是一个Ajax / jQuery分层选择框,就像这里http://kotowicz.net/jquery-option-tree/demo/demo.html一样。在每次选择之后,我都在考虑从模型中获取下一个框的数据。我正在使用Codeigniter框架。

关于最佳实践的一些专业知识。

2 个答案:

答案 0 :(得分:2)

当你拥有一个以XHR为中心的应用程序时,实际上有两个三元组MVC是有意义的。一个用于前端,一个用于后端。前端会将后端MVC视为数据源(与后端模型层中的数据抽象结构相同,处理数据库,缓存和其他形式的存储)。

基本上,您的“ajax应用程序”不是 view 。它应该是一个完全实现的应用程序。当然,如果您实际上是在创建一个由XHR驱动的大型应用程序,那么就有必要这样做。

通常,您在浏览器中看到的不是视图。它只是视图创建的响应。在网络环境中,MVC应用程序的用户是网络浏览器


enter image description here 来源:wikipedia

上图表示classical MVC和Model2 MVC (也称为“Web MVC”)中信息的简化流程。它们之间的区别来自于web的本质:每次用户发送输入时,它都希望收到响应。这意味着时间上没有模糊性。 MVC三元组的所有部分仅在响应发送之前存在。观察模型层是没有意义的。

在您的Web应用程序中查看实际上是实例,其中包含所有UI逻辑并负责将响应发送到浏览器。它创建的响应可以是HTML(通过组合多个模板制作),JSON或XML文件。或者只是HTTP位置标题。

  

P.S。您可能会发现this answer与您的学习相关。

答案 1 :(得分:0)

我认为第二个链接上的图像是错误的,因为正确的方式应该是控制器与模型的通信。如果视图直接与模型通信意味着html代码与php arge句子混合,那就是错误。