我的MVC应用程序经常会有很多ajax调用(通过JQuery.get())。我的控制器充斥着许多小方法,这些方法通过ajax被调用,这有点困扰我。在某种程度上,它似乎有点违反了MVC模式 - 控制器现在更像是数据访问组件而不是URI路由器。
我进行了重构,使得我的“真正”的控制器仅执行标准路由响应(返回ActionResponse对象)。因此,对/home/的调用显然会启动HomeController类,该类将以规范控制器方式响应,即返回普通的View。
然后,我将我的ajax内容移动到一个新的控制器类中,其名称我将前缀命名为“Ajax”。因此,例如,我的页面可能有三个不同的功能部分(例如购物车或用户帐户)。我为每个功能部分都有一个ajax控制器(AjaxCartController,AjaxAccountController)。将ajax调用内容移动到自己的控制器类中并没有什么不同 - 它只是为了保持代码整洁。在客户端,JQuery将使用这个新控制器,如下所示:
我进行了重构,使得我的“真正”的控制器仅执行标准路由响应(返回ActionResponse对象)。因此,对/home/的调用显然会启动HomeController类,该类将以规范控制器方式响应,即返回普通的View。
然后,我将我的ajax内容移动到一个新的控制器类中,其名称我将前缀命名为“Ajax”。因此,例如,我的页面可能有三个不同的功能部分(例如购物车或用户帐户)。我为每个功能部分都有一个ajax控制器(AjaxCartController,AjaxAccountController)。将ajax调用内容移动到自己的控制器类中并没有什么不同 - 它只是为了保持代码整洁。在客户端,JQuery将使用这个新控制器,如下所示:
//jquery pseudocode call to specific controller that just handles ajax calls
$.get('AjaxAccount/Details'....
(1) MVC中响应Ajax调用是否有更好的模式?
(2) 对我来说,当涉及到Ajax时,MVC模型似乎有些不完整 - 它并没有真正地“控制”东西。它只是处理Ajax调用最好且最不痛苦的方式(或者我很无知)?换句话说,“控制器”抽象似乎与Ajax不能很好地协作(至少从模式的角度来看)。我是否遗漏了什么?