Question

J'ai besoin de créer un processus "transactionnel" à l'aide d'une API externe qui ne prend pas en charge les transactions COM+ ou .NET (Sharepoint pour être exact)

Ce que je dois faire, c'est être capable d'effectuer un certain nombre de processus dans une séquence, mais tout échec dans cette séquence signifie que je devrai annuler manuellement toutes les étapes précédentes.Dans mon cas, il n'y a que 2 types d'étapes, toutes deux assez faciles à annuler/annuler.

Quelqu'un a-t-il des suggestions de modèles de conception ou de structures qui pourraient être utiles pour cela ?

Était-ce utile?

La solution

Si vos modifications sont apportées au modèle objet SharePoint, vous pouvez utiliser le fait que les modifications ne sont pas validées tant que vous n'appelez pas le modèle objet SharePoint. Update() méthode de l'objet modifié, telle que SPList.Update() ou SPWeb.Update().

Sinon, j'utiliserais le Commande Design pattern.Chapitre 6 dans Modèles de conception tête première a même un exemple qui implémente la fonctionnalité d'annulation.

Autres conseils

Le modèle de commande GoF prend en charge les opérations annulables.

Je pense que le même modèle peut être utilisé pour les opérations séquentielles (commandes séquentielles).

Un autre bon moyen de restauration/annulation est le Modèle de souvenir.Il est généralement utilisé pour prendre un instantané de l'objet à un moment donné et laisser l'état de l'objet revenir au souvenir.

À côté du GOF Modèle de commande vous voudrez peut-être aussi jeter un oeil à Script de transaction modèle de P de l'EAA.

Vous devriez probablement créer une commande composite (ou un script de transaction) qui s'exécute en séquence.

Vous voudrez peut-être jeter un œil au gestionnaire de ressources compensatoires :

http://msdn.microsoft.com/en-us/library/8xkdw05k(VS.80).aspx

Si vous utilisez C++ (ou tout autre langage avec exécution de destructeur déterministe à la fin des étendues), vous pouvez consulter Gardes de lunette.Cette technique peut probablement également être adaptée à .NET en faisant en sorte que ScopeGuard implémente IDisposable et en saupoudrant les instructions "using" selon les besoins.

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