带有过滤和排序的服务器端分页

时间:2013-07-01 06:36:44

标签: c# asp.net web-services rest asp.net-web-api

在我们的Web应用程序中,我们有一些非常慢的数据密集型UI页面,我们现在使用的客户端排序和过滤强制这些页面加载来自API的所有数据(在JSON中)和然后在浏览器中执行操作,这通常意味着页面在准备好使用之前会冻结几秒钟。 我们正在研究的解决方案是提供服务器端分页,支持过滤和排序。

对于分页,我们在URL中发送pageIndex和pageSize参数,它工作正常。现在,为了排序(和过滤),我们考虑发送属性的名称以在JSON对象内部进行排序(和过滤),该对象可以由API解析以生成对数据的正确查询。我在这里遇到的问题是,为了使事情变得尽可能简单和快速,UI页面必须“知道”他们想要对数据进行排序(或过滤)的数据列名称,这是不可取的。

例如,API在名为“FN”的属性中(在JSON对象中)向用户发送名字;但是,要求API根据名字对用户进行排序,UI必须发送“FirstName”作为排序属性,这是我数据库中列的名称。这种方法允许我将属性的名称直接传递给我的数据层,并快速完成任务。但是,UI需要识别数据库中数据表的列名称,这几乎解除了分层之间关注点的整体想法(这是我们将Web应用程序分解为单独的API的主要动机, UI)。

是否有一种干净的方法来提供服务器端分页的过滤和排序,而不会在UI和后端之间创建这种依赖关系?

谢谢。

1 个答案:

答案 0 :(得分:0)

这里看不到太多问题。不知道你的应用程序完全是如何构建的,但我们假设我们有一个包含2列的表(Acol,Bcol)。列的名称是用属性(Acol:“名字”,“LastName”或意大利语“Nome”,“Cognome”,谁关心......)写成的。因此,当用户以某种方式请求排序或过滤时,您不会传递列的固定名称,而是传递该列属性中的字符串。在列上设置属性的Adn? :服务器。

所以服务器为列设置别名(实名,可以翻译为适合客户端的本地化上下文),客户端只是传递该字符串,甚至不知道它对服务器的作用,导致服务器知道该怎么办。