sharepoint - transeccional - Patrón de diseño transaccional
investigacion no experimental (6)
El Patrón de Comando GoF admite operaciones que se pueden deshacer.
Creo que el mismo patrón se puede usar para operaciones secuenciales (comandos secuenciales).
Tengo la necesidad de crear un proceso "transaccional" utilizando una API externa que no admite transacciones COM + o .NET (Sharepoint para ser exactos)
Lo que necesito hacer es poder realizar una cantidad de procesos en una secuencia, pero cualquier falla en esa secuencia significa que tendré que deshacer manualmente todos los pasos anteriores. En mi caso, solo hay 2 tipos de pasos, ambos af que son bastante fáciles de deshacer / revertir.
¿Alguien tiene alguna sugerencia para los patrones de diseño o las estructuras que podrían ser útiles para esto?
Es posible que desee echar un vistazo al Administrador de recursos de compensación:
http://msdn.microsoft.com/en-us/library/8xkdw05k(VS.80).aspx
Junto al patrón de comando de GOF, también puede echarle un vistazo al patrón del script de transacción desde P de EAA .
Probablemente deberías crear un Comando compuesto (o un Script de transacción) que se ejecuta en secuencia.
Si usa C ++ (o cualquier otro lenguaje con ejecución determinista de destructor cuando finaliza el alcance) puede echar un vistazo a Scope Guards . Esta técnica probablemente también se puede adaptar a .NET haciendo que ScopeGuard implemente IDisposable y rocíe declaraciones de "uso" según sea necesario.
Si sus cambios se realizan en el modelo de objetos de SharePoint, puede utilizar el hecho de que los cambios no se confirman hasta que llame al método Update()
del objeto modificado, como SPList.Update()
o SPWeb.Update()
.
De lo contrario, usaría el patrón de diseño de comando . El Capítulo 6 en Head First Design Patterns incluso tiene un ejemplo que implementa la funcionalidad de deshacer.
Otra buena forma de deshacer / deshacer es el Patrón Memento . Por lo general, se utiliza para tomar una instantánea del objeto en un momento dado y permite que el estado del objeto se revierte al recuerdo.