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

时间:2015-07-21 19:25:43

标签: algorithm design-patterns crud

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

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

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

1 个答案:

答案 0 :(得分:1)

问题的主要类别是分层架构(架构模式),此问题涉及运行系统域逻辑的位置。

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

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

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

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

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

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

此选项可能存在两个方面的缺陷。这样做的主要原因是只需要在客户端上运行少量的域逻辑。然后,技巧是将通用功能隔离到其自身独立的模块中,该模块不依赖于系统的任何其他部分。这样,您就可以在客户端和服务器上运行该模块。

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

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

相关问题