【问题标题】:Separate HTTP requests for each dropdown or a single request for a fat FormViewModel?每个下拉列表的单独 HTTP 请求或胖 FormViewModel 的单个请求?
【发布时间】:2021-12-15 03:55:00
【问题描述】:

如果用于创建项目的视图包含一些下拉框/复选框/任何带有来自服务器的值的东西,它应该发送单独的请求来填充这些控件的值(每个数据集合一个请求)还是更好有一个单一的 api 端点来返回填写前端表单所需的所有数据?

为简单起见,我在这里模拟了一个示例:假设我们正在为一家汽车服务公司开发一个应用程序,客户可以在其中进行预约:

如果前端应用程序向 api/modelsapi/services 发出 2 个 get 请求,或者这些集合可以在单个响应中从服务器返回(来自 api/appointments/createformdata),关于此的最佳实践是什么?

提前谢谢你!

【问题讨论】:

    标签: asp.net angular api web software-design


    【解决方案1】:

    好吧,因为在您的示例中,两个组合框都需要值,所以我会在第一页加载时加载。不需要单独的请求,除非这些组合框依赖于表单中的数据,然后在这种情况下,您别无选择,只能等待用户输入来确定。

    那么,假设您有两个组合框,而第二个组合框由第一个组合选项级联?好吧,第一个组合框不会改变 - 所以在页面加载时加载它,无论如何你都必须这样做。编写单独的事件或代码来加载必须首先加载的第一个组合是没有用的。

    但是,第二个组合框呢?好吧,既然它的值是基于第一个的,那么再一次,你别无选择,是吗?

    所以,我没有看到任何真正的用例,如果两个组合框彼此独立,那么我认为几乎没有理由需要单独的请求,并且首先加载两个组合框页面加载在这里还不够? (那么您不需要任何单独的请求)。

    现在,如果有某种选项卡或 UI 并且用户不能立即看到或使用组合框,或者甚至可能永远不会从选项卡控件中选择某个选项卡?好吧,在这种情况下,您可以通过不填写组合框来加快页面加载速度,直到用户到达表单的该部分(可能是一些弹出对话框,或者可能是某种向导步骤)。

    但是,再一次,如果两个组合框不相互依赖?然后我认为没有理由使用两个请求或事件来加载它们。但话又说回来,问题是你过去是如何加载组合框的?

    我的意思是,如果每个组合框都是一些 ajax 调用,那么继续使用其中的两个,并保留这两个请求。由于尝试合并,或者将两个 ajax 调用填充两个组合框作为一个调用是一种痛苦,并且不遵循重用设计模式。结果是混乱的代码,更糟的是迫使你编写做两件事的代码。

    我的意思是,如果您构建了一个很好的通用例程来调用 + 填写组合框,然后继续使用该代码来填写第二个。我不会破坏非常好的工作代码来以某种方式填写页面上的两个简单组合框并尝试使用一个请求从组合框中进行该归档。

    正如我所说,如果组合框在页面加载开始时就在清晰的视图中,那么在第一页加载后的代码就是这样做的地方,除非出现一些相当大的性能问题。因此,您现在没有任何单独的请求来填写组合,是吗?

    但话又说回来,一个组合框适用于 30 个,也许是 50 个选项的顶部,然后,您需要一个不同的 UI,因此再一次,这样做在性能方面也没有问题怎么样,是吗?

    如果您试图修复或避免性能问题?然后你在combo box里放了太多的选项,那是错误的ui选项,然后再一次,你没有这个问题,是吗?

    【讨论】:

    • 就我而言,这两个组合框不相互依赖。所以,从你所说的来看,最好有 2 个 ajax 请求:一个用于模型列表,一个用于服务列表,对吧?
    • 是的,你的结论是正确的。另一方面,在页面加载服务器端时,您还可以加载组合框,尤其是如果需要立即在表单上使用组合框(不是某些弹出对话框或显示页面上的选项卡控件)该信息)。所以,是的,你的结论是正确的。但是,再一次,如果我们需要两个组合框,那么为什么不在第一个页面加载时设置和填充它们,现在我们没有任何 ajax 或 web 方法调用。当然,这取决于我们如何加载和访问该页面 - 但无论如何,我不会太担心,两个请求就可以了
    猜你喜欢
    • 2012-01-04
    • 1970-01-01
    • 1970-01-01
    • 2012-08-10
    • 2016-03-29
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多