2017-09-13 1 views
0

Nous souhaitons stocker une propriété dans un magasin de données qui assure le suivi de l'ordre d'affichage des clients. Cependant, les clients seront en mesure de déplacer des entités, et nous devons ensuite mettre à jour l'ordre d'affichage.Quelle est la meilleure pratique pour stocker et mettre à jour l'ordre d'affichage dans une API REST?

La solution la plus évidente que je peux penser est juste de stocker les ordres d'affichage comme des entiers dans la même séquence que les entités sont affichées. Le problème avec cette solution est que si nous devons déplacer le dernier élément et le mettre en premier, nous aurons besoin de mettre à jour tous les éléments de la liste.

L'autre idée que je peux proposer est de stocker l'ordre d'affichage sous la forme d'une séquence avec des espaces comme 1000, 2000, ..., 100 000. Lorsque nous déplaçons des entités, nous donnons toujours la valeur d'affichage les entités que nous mettons entre les deux, donc si nous voulons mettre une entité entre les entités avec la valeur d'affichage 1000 et 2000 nous lui donnerions la valeur d'affichage 1500. Avec cette solution, nous aurions juste à mettre à jour l'entité que nous déménageons, mais si nous manquons de nombres entre deux noeuds, nous devrons faire une sorte de réarrangement affectant plus d'entités. Vous pourriez faire l'écart si grand que cela n'arriverait presque jamais.

Existe-t-il une meilleure pratique pour résoudre ce problème?

Répondre

0

Si vous devez toujours afficher la liste complète (et pas seulement une page), vous pouvez suivre uniquement l'élément suivant dans la liste. Dans votre exemple, cela signifierait que le dernier élément devrait «pointer» vers le premier et que l'avant-dernier point ne devrait plus pointer vers quoi que ce soit. Vous pouvez également avoir une sorte d'élément factice qui pointe vers le premier élément réel de la liste et que vous pouvez facilement localiser, ou vous pouvez garder une trace du premier élément d'une autre manière. Donc, vous récupérez tous les éléments, puis en mémoire les trier.

La solution ci-dessus n'est pas pratique si la liste est affichée en pages, ce qui implique que seulement certaines parties de la liste sont extraites de la base de données à un moment donné.

+0

Ok, mais avec cette requête vous devez au moins mettre à jour l'entité que vous déplacez, et l'entité que vous mettez après. Beaucoup mieux que d'avoir à mettre à jour plusieurs entités au moins. Je ne vois pas pourquoi les solutions ci-dessus ne fonctionneraient pas avec la recherche de pages? –

+0

@DavidBerg Si vous chargez toute la liste en une fois, puis que vous la montrez à l'utilisateur dans les pages, la solution fonctionnera. Mais si vous voulez charger une seule page d'éléments, il n'y a pas de moyen facile de savoir où cette page commence. – Dialecticus

+0

Hmm, je suppose que cela dépend de la façon dont l'implémentation de la mise en page est faite. La seule fois où cela devient un problème, je le vois si vous allez déplacer un élément vers une autre page. Dans ce cas, vous devrez aussi aller chercher cette page. Ou est-ce que je manque quelque chose ici? –