关于MVC架构的问题

时间:2010-06-06 19:43:47

标签: model-view-controller architecture

我开始编写一个相当复杂的Web应用程序,它变得非常混乱。 所以我想我会尝试以更好的方式组织它。 MVC似乎合适。 我之前从未使用过MVC,并且正在研究它我正在努力巩固对它的更好的认识(我的问题显然反映了我认为到目前为止我学到的东西)。 我的问题略微面向JavaScript:

  1. 什么对象应该提出“AJAX”请求?控制器或型号? (分离 - 如果模型只是存储/操纵数据,它是否应该关心/知道数据来自何处,或者它应该是获取数据的那个?)

  2. Model应该调用View函数为它们提供数据作为参数,还是View应该查询(引用)模型本身? (考虑到分离原则,“视图不应该关心/知道从哪里获取数据” - 这是正确的吗?)

  3. 一般情况下,View应该“知道”模型的存在,反之亦然?控制器是唯一将它们粘在一起还是仅仅是不正确的东西? (我真的怀疑这种说法一般是正确的)

  4. 我很有可能想把它移植到桌面/移动应用程序中,所以我想以一种允许我完成任务的方式分离组件,替换当前的数据源,HTTP请求,使用数据库访问,并替换视图。

    也许我提出过的所有方法仍然是“有效的”MVC,这取决于我选择。我知道没有什么是一成不变的,我只是想在脑子里有一个(更好的)总体思路。

3 个答案:

答案 0 :(得分:2)

  1. 假设你的意思是真正的Ajax(即异步Javascript调用),我认为它确实是视图的责任。 Javascript是客户端,而您的控制器和模型是服务器端。
  2. 模型和视图应该没有任何交互。控制器是信息网关和控制应用程序流的粘合剂。
  3. 如上所述,视图应该与模型没有交互。正如你所说,控制器是中间人。对于大多数框架,有一些方法可以将管道短路,但应该避免使用它们。

答案 1 :(得分:1)

1 - View发出AJAX请求,并由控制器处理。控制器知道要求什么数据,何时以及如何将其打包为视图,但不知道任何底层存储机制(例如,SQL,XML,NoSQL ......);这是由模型抽象出来的 2 - 两者都不。视图和模型不应该彼此了解。
3 - 不是第一个,是第二个。

答案 2 :(得分:0)

我自己走了以下路径:

  1. 模型中与数据相关的所有处理,包括AJAX请求和处理程序
  2. Controller处理附加到Model和View
  3. 的侦听器
  4. 我喜欢这种控制器监听和互连的概念。我认为这会让事情变得更简单
  5. 查看Model-View-Controller in jQuery教程了解此方法。它使我的生活变得更轻松,并以相当的方式改进了代码。易于重构和重用。