客户端和服务器:数据过滤和排序同步



我有一个java客户机-服务器crud应用程序。在客户端,我打开人表,我可以设置过滤器,例如按城市,年龄,性别。此外,我还可以添加一些排序规则,例如按姓名排序,然后按年龄排序。这些过滤和排序规则被发送到服务器,在那里它们被传递给sql dao并在sql代码中使用。服务器根据过滤和排序规则将DTO返回给客户端。这一点很重要——是服务器实现了这些规则,因为客户端只将这些规则传递给服务器。一切都很简单明了。

现在我在客户端应用程序中创建新的Person。新添加的人员必须在人员表中可见。现在我遇到了一个问题。如何根据过滤和排序规则将此人添加到表中。我看到的唯一解决方案是让客户端根据相同的规则刷新来自服务器的所有数据。然而,很明显这是一个糟糕的解决方案。

我相信这是crud应用程序的常见问题。可能的解决方案是什么:模式、算法还是库?这个问题的名称是什么(如果存在)

问题的大范畴是分层体系结构(一种体系结构模式),这个问题涉及在哪里运行系统的域逻辑。


在客户机-服务器系统上,需要决定应该在哪里进行处理。大致有三种不同的选项:

1)运行服务器上的所有内容

这通常是最简单的情况。最大的优点是,所有东西都很容易升级和修复,因为它们都在有限的地方。缺点是,即使是为了最简单的功能,客户机也需要往返服务器,这将导致用户体验受到影响。从维护的角度来看,这是最好的选择。

2)在客户端运行所有内容

支持在客户端上处理的一般理由是用户界面响应性和断开连接的操作。在这种情况下,服务器仅充当哑数据源。很多时候,如果您需要将一些逻辑移动到客户端,最好将其全部移动到那里——至少它是在一个地方。然而,保持客户端同步和避免兼容性错误带来了挑战。

3)在客户端和服务器之间分割处理

这个选项可能有两个世界的缺点。这样做的主要原因是,只有少量的域逻辑需要在客户机上运行。诀窍是将公共功能隔离到它自己的自包含模块中,该模块不依赖于系统的任何其他部分。这样,您可以在客户端和服务器上同时运行模块。


最简单的选择是使用(1),其中客户端将向服务器发送新的人员数据,服务器将向客户端返回更新的、排序和过滤的人员列表。显然,这需要服务器往返,可能会损害用户体验。

另一种选择是使用(3),您将在客户端上复制服务器的域逻辑。接下来的方法是隔离人员处理模块,以便您可以在两端使用它。

最新更新