- Split atomic operation's execution and rollback logic with further independent invocation of each one
- Provide an operation execution/rollback results in your logic, containing a fact about either success or failure (more useful in composite operations which are discussed below)
- Build composite operations consisting of either atomic operations or complex ones (with unlimited nesting) and execute/rollback them independently
- Enjoy the way composite operations are executing, handling execution fails and rolling back operations automatically
- Use fluent API to create atomic/complex operations (convenience is questionable BTW)
- Pass parameters in your operation's execution/rollback logic in moment of corresponding invocation
- Return results from operations except the indication of success (and message if it's not)
- Fire operation and forget (you should return some operation result)
.NET 3.5 (because there is usage of Func-s)