0

我有一个接受字符串值的空列表。

添加元素时,我需要检查列表中是否已存在具有相同值的字符串,如果是,则应发生异常(ROLE 1 仅数组中的唯一值)。

现在我想一个用户让编辑列表中的元素,如果新编辑的值是唯一的,否则应该发生异常。

我的问题是:让我们假设用户选择了编辑元素,但在发送到服务器时实际上并没有改变值。系统应该检测到元素没有被更改并接受该值(即使列表中已经存在)。

PS 我简化了问题,我实际上使用的是 MVC 和 EF & linq。我的问题是我无法在我的应用程序界面中检查插入的值是否已被编辑。

你能帮我找到一个有效的算法来解决这个问题吗?谢谢

让我知道问题是否足够清楚或您需要更多信息

4

1 回答 1

1

这是我的解决方案:

  1. 让客户端检查文本是否被修改。如果没有,告诉服务器没有修改。如果这是不可能的,让客户端同时发送原始文本和修改后的文本,然后服务器将能够检查它是否被修改。(如果不是,则无需触摸您存储的数据)。这适用于桌面和 Web 环境。

  2. 最好不要使用列表,使用集合(可能是哈希集)。该套装只允许拥有每个项目一次。如果你不能,我猜你可以继续使用该列表。如果我理解正确,您使用的是数据库,那么如果您可以直接与数据库引擎交互而不是同步列表(或集合),您的应用程序将获得性能提升。

  3. 将列表/集的版本转换为添加-删除对(而不是设置项目)。在进行任何修改之前,让它检查列表/集是否包含新值。如果新值已经存在,那么您可以抛出异常或向客户端发送消息(或者更适合您的环境的任何内容)。

  4. You may want to sync the access to your list/set, keep it simple: use a lock (Monitor). I would consider a read-write lock, but that is complicating things while you are learning. [If you interface directly with the database engine, you can let it handle that instead]. Note: there is no need for this if you will only have one single client... ever (unless that single client can send multiple concurrent requests... :P).

于 2012-07-11T15:21:11.977 回答