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

Client and server: data filtering and sorting synchronization.

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

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

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

问题的大类是分层架构(一种架构模式),这个问题涉及 运行 系统域逻辑的位置。


在客户端-服务器系统上,需要决定在何处进行处理。大致有三种不同的选择:

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

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

2) 运行 客户端上的所有内容

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

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

这个选项可能两全其美。这样做的主要原因是客户端上也只有少量域逻辑需要运行。诀窍是将通用功能隔离到它自己的独立模块中,该模块不依赖于系统的任何其他部分。这样你就可以运行客户端和服务器上的模块。


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

另一个选项是 (3),您将在客户端复制服务器的域逻辑。前进的方向是隔离人员处理模块,以便您可以在两端使用它。