2011-08-15 2 views
0

J'ai une collection de certains articles et certaines opérations sur eux. Cette opération fait partie des appels distants entre le client et le serveur et doit s'exécuter sur tous les éléments à la fois. Du côté serveur, il s'exécute plusieurs fois sur chaque élément et peut échouer ou réussir. J'ai besoin de savoir quels articles ont réussi et lesquels ont échoué. Je suppose que c'est un cas plutôt courant et qu'il y a de bonnes solutions. Comment devrais-je le concevoir?Gestion des erreurs problème de conception sur la collecte d'éléments

Répondre

1

il devrait fonctionner sur tous les éléments à la fois

Vous haïra votre vie si vous ne lisez pas dans cela comme une exigence de conception. Tout ou rien est la bonne façon de le gérer. Cela simplifiera tout ce que vous faites.

Si ce n'est pas une option, faites la chose la plus stupide possible. Envelopper chaque appel dans un try/catch et donner un rapport. Les chances sont que personne ne sera en mesure de consommer le rapport, ce qui est une autre raison que tout ou rien est la bonne chose à faire.

modifier:

Elaborer: Lorsque Batching, erreurs d'écriture logique simple rapport est bien, mais la logique d'écriture pour récupérer d'erreurs est très compliquée. Je n'ai jamais vu un système gérer vraiment bien la récupération sur le traitement par lots. Je suis sûr qu'il y a des cas d'angle où chaque élément est complètement indépendant. À ce stade, peu importe que l'un ou l'autre a échoué, mais ce n'est généralement pas le cas.

En général, je me attends à des erreurs qui se produisent lors d'une opération de traitement par lots pour ne pas être critique. J'entends par là que le système devrait être capable d'ignorer les erreurs et de continuer à fonctionner comme si le message à l'origine de l'erreur n'avait jamais existé.

S'il est vraiment essentiel que ces messages sont traités, alors je certainement essayer de tout ou rien.

+0

Mon opération peut échouer sur plusieurs points par des raisons différentes. Quelle erreur devrais-je retourner dans ce cas? Si adhérer 'Tout ou rien', je devrais retourner l'erreur du premier élément échoué, non? – ks1322

+0

Selon le système, je suppose, mais généralement c'est ce que je m'attends. Lors de la première erreur, vous vous attendez à ce que toutes les actions du lot soient également annulées. –