To answer your second question, I see four problems with event sourced
sagas:
1. It can be difficult to define where the saga's events go, since sagas
commonly span across BC boundaries. So they need to be in a kind of
pseudo-BC themselves with its own (logical or physical) event store.
Which leads to a kind of recursive problem - now you need to coordinate
communications of business BCs with that saga-BC. Saga-sagas, maybe? :)
2. You will end up having two look-alike events, one for the aggregate,
one for the saga. E.g. CustomerPlacedOrder and OrderSagaOrderWasPlaced.
Not neccessarily a problem, but not elegant either. On the action side,
you will even have three time the "same" information: saga event,
saga-originated message (=command) and target aggregate event(s).
3. It leads a step further towards a CQRS-as-global-architecture style,
which is Not a good thing(TM).
4. Somewhat related to 3, there is a slight chance that someone at some
point will trigger a saga based not on a domain event but on another
saga's event. Since that is just derived and not guaranteed to stay,
this might lead into a fragile mess.
None of those is a showstopper, but I can't see much value in having the
saga's state transition stored as full-fledged events and named in the
UL. Especially since the saga should only do routing, but not logic.
YMMV of course (and I have done event-sourced sagas without much
difficulty).
Cheers
Phil