gpt4 book ai didi

ajax - ASP MVC Ajax Controller 模式?

转载 作者:行者123 更新时间:2023-12-04 02:23:45 25 4
gpt4 key购买 nike

我的 MVC 应用程序往往有很多 ajax 调用(通过 JQuery.get())。我的 Controller 充满了许多通过 ajax 调用的微小方法,这让我有些烦恼。在我看来,这有点打破了 MVC 模式—— Controller 现在更像是一个数据访问组件,而不是一个 URI 路由器。

我进行了重构,这样我就拥有了一个只执行标准路由响应(返回 ActionResponse 对象)的页面的“真正” Controller 。因此,调用/home/显然会启动 HomeController 类,该类将以规范的 Controller 方式响应,返回一个普通的 jane View 。

然后,我将我的 ajax 内容移动到一个新的 Controller 类中,我在其名称前加上“Ajax”。因此,例如,我的页面可能具有三个不同的功能部分(例如购物车或用户帐户)。我为其中的每一个(AjaxCartController、AjaxAccountController)都有一个 ajax Controller 。将 ajax 调用的东西移到它自己的 Controller 类中确实没有什么不同——它只是为了让事情更干净。在客户端显然 JQuery 将因此使用这个新 Controller :

//jquery pseudocode call to specific controller that just handles ajax calls
$.get('AjaxAccount/Details'....

(1) MVC 中是否有更好的模式来响应 ajax 调用?

(2) 在我看来,当涉及到 ajax 时,MVC 模型有点漏洞——它并不是真正的“控制”东西。它恰好是处理 ajax 调用的最好和最不痛苦的方式(或者我是无知的)?

换句话说,“ Controller ”抽象似乎不能很好地与 Ajax 配合使用(至少从模式的角度来看)。有什么我想念的吗?

最佳答案

虽然你可以把 Controller最后,为了让 ASP.NET MVC 的路由魔法发挥作用,我倾向于做你已经做过的事情——除非我读到 AjaxCartController。我心想AjaxCartPresenter (如 WinForms 中常见的 Model-View-Presenter 模式)。也就是说,这个“ Controller ”不是控制,而是无耻地与 View 界面绑定(bind)。但是,与 View 不同的是, Controller 演示者是可测试的。

当我们对一个网页进行 AJAX 化时,我们正在把它变成可以以细粒度的方式使用react的东西,所以细粒度的方法是可以的。 细粒度是重点以及发明它的全部原因。对于特定场景,我们故意远离 REST,因为该特定模式没有解决手头的 UI 需求,而是选择了类似 RPC 的模型。它们只是模式,一种不会在所有情况下都比另一种更好,即使我们的技术堆栈可能会将我们推向另一种。 (事实上​​,HTTP 本身在 block /页面/实体/代表性状态传输文档中做得更好。)

在心理上,您可以将这些页面视为 WinForms 应用程序中的表单;这些方法位于“ Controller ”中的事实只是对所使用技术的人工制品和让步。 (如果它对您造成困扰,您可以将 AJAX 方法转换为 IHttpHandler 并完全绕过 MVC,但是为什么要抛弃自动路由/实例化/方法查找并让自己变得困难?它在架构上会“干净” '和纯粹但可疑的好处。)

...至少,这就是我对自己合理化的方式=)

关于ajax - ASP MVC Ajax Controller 模式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2640483/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com