2012-07-11 3 views
0

J'ai une liste vide acceptant les valeurs de chaîne.Algorithme conseil Valeur unique et modification

Lorsqu'un élément sera ajouté, j'ai besoin de vérifier si une chaîne avec la même valeur existe déjà dans la liste, si oui une exception doit se produire (ROLE 1 seule valeur unique dans le tableau).

Maintenant, je voudrais qu'un utilisateur laisse modifier l'élément dans la liste, si la nouvelle valeur éditée est unique bien, sinon une exception devrait se produire.

Mon problème est le suivant: supposons que l'utilisateur sélectionne l'élément d'édition mais ne change pas la valeur lors de l'envoi au serveur. Le système doit détecter que l'élément n'a pas été modifié et accepter la valeur (même si elle est déjà présente dans la liste). PS Je simplifie le problème, je suis en fait en utilisant MVC et EF & linq. Mon problème est que je ne peux pas vérifier si la valeur insérée a été éditée ou non dans l'interface de mon application.

Pourriez-vous m'aider à trouver un algo efficace pour résoudre ce problème? Merci

Permettez-moi de savoir si la question est assez claire ou vous avez besoin de plus amples informations

+0

Quel type de liste utilisez-vous, est-ce un ListBox ou un autre type de liste? Comment sont les valeurs ajoutées au contrôle? Comment les modifications sont-elles acceptées ou abandonnées? Les éléments sont-ils liés aux données? – JonC

+0

Re "Mon problème est: ...": Si vous recherchez la liaison de données dans .Net, tout ce qui est pris en charge par ces bibliothèques. –

+0

valeur sont dans la base de données est donc une table, je n'ai qu'une seule zone de texte où je peux modifier un élément. – GibboK

Répondre

1

Ceci est ma solution:

  1. Que le chèque du client a été modifié si le texte. Sinon, dites au serveur qu'il n'y a pas eu de modification. Si cela n'est pas possible, demandez au client d'envoyer le texte original et le texte modifié, puis le serveur pourra vérifier s'il a été modifié. (Si ce n'était pas le cas, il n'est pas nécessaire de toucher les données que vous stockez). Cela s'applique à la fois aux environnements de bureau et Web.

  2. De préférence, n'utilisez pas de liste, utilisez un ensemble (peut être un hashset). L'ensemble permettra seulement d'avoir chaque élément une fois. Au cas où vous ne pouvez pas je suppose que vous pouvez continuer à utiliser la liste. Si je comprends bien, vous utilisez une base de données, donc si vous pouviez interagir directement avec le moteur de base de données au lieu de synchroniser la liste (ou l'ensemble) votre application aura un regain de performance.

  3. Convertir l'édition de la liste/ensemble en une paire add-remove (au lieu de définir l'élément). Faites-le vérifier si la liste/ensemble contient la nouvelle valeur avant d'effectuer toute modification. Si la nouvelle valeur est déjà présente, vous pouvez lancer une exception ou envoyer un message au client (ou ce qui est le plus approprié pour votre environnement).

  4. Vous pouvez synchroniser l'accès à votre liste/ensemble, restez simple: utilisez un verrou (moniteur). Je considérerais un verrou en lecture-écriture, mais cela complique les choses pendant que vous apprenez. [Si vous vous interfacer directement avec le moteur de base de données, vous pouvez le laisser gérer cela à la place]. Note: ce n'est pas nécessaire si vous n'avez qu'un seul client ... à moins que ce seul client puisse envoyer plusieurs requêtes simultanées ...: P).

Questions connexes