Question

Lors de la communication des conflits d'accès concurrentiel à votre couche d'application, est-il une alternative à l'utilisation des exceptions qui respecte également le principe de séparation commande de requête , ou sont des exceptions le meilleur mécanisme que nous avons (dans les langues que les exceptions de soutien)?

Dans les entrailles de ma demande, j'ai une logique de verrouillage optimiste qui exécute quelques couches vers le bas quand je l'appelle certaines méthodes de haut niveau, par exemple (Dans mon cas, j'utilise une couche d'accès aux données personnalisées, bien que je ne suis certainement ouvert à entendre comment les implémentations ORM font). appels de méthode de haut niveau que les applications interagit avec ressembler à ceci:

// 'data' is just a placeholder for multiple parameters, including something
// that contains row version information
void Customer.UpdateInformation(object data);

Je dois être en mesure de dire aux utilisateurs d'une application Web lorsque quelqu'un d'autre a mis à jour les données sur lesquels ils travaillent.

Je préfère ne pas retourner une valeur à partir de méthodes que les données de changement. Ainsi, dans le passé, j'ai jeté des exceptions (similaire à l'API de l'adaptateur de données .NET, ce qui jette un exceptions exogènes , dans la taxonomie de Eric Lippert?

Était-ce utile?

La solution

Dans mes exceptions d'opinion sont la meilleure façon de communiquer ce genre d'erreurs. Je pense que votre solution est tout à fait raison, parce que vous jetez une sorte spécifique d'exception que vous pouvez prendre à la couche de présentation. La couche de présentation peut utiliser les informations dans cette exception à l'affichage à l'utilisateur.

Bien que des exceptions sont la meilleure façon, créer une expérience utilisateur agréable peut être très difficile. La chose la plus simple serait de dire à l'utilisateur qu'il y avait un conflit et choisir s'il aimerait perdre ses changements ou comme pour remplacer les nouveaux changements. Il devient difficile quand vous voulez afficher les conflits ou laisser l'utilisateur choisir les valeurs à passer outre et qui non. Ou du moins, il est très difficile de le faire d'une manière générique. Vous auriez besoin peut-être une interface spécifique pour résoudre de tels conflits pour chaque écran dans votre système où les conflits pourraient se produire.

Dans les systèmes que je travaillais, nous ne guère la plupart du temps pas pris ces exceptions pour l'affichage à l'utilisateur. Nous avons surtout essayé de prévenir ces conflits de se produire en changeant les processus derrière elle. Il dépend bien sûr tout à fait de votre type d'application et la façon dont l'entreprise fonctionne (ou aime travailler) quelle est la meilleure solution.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top