I'll be straight up here, I don't like Jasper 1.0's stateful saga approach as well as older competitors, so let's make it better!!!
Ideas:
Public, concrete classes suffixed with Saga will be the message handlers
The Saga types will be persisted
Can have Handle() or Consume() methods
Static Create() : [SagaType] methods or a constructor for a single argument will be considered to be the initiator methods
If using a ctor for the initiator, will need other constructors
Saga persistence providers should use MethodCall as much as possible, or derivatives thereof
Assume that the Saga id can come off of command messages either through SagaId members, [SagaName]Id, or a member marked as [SagaIdentity]. Keep the fallback to using the saga id header though
Convert Test Harnesses First
For each copy/pasted version of SagaTestHarness
[ ] Copy the Handle() methods on the TSagaHandler to the TSagaState
[ ] Eliminate the TSagaHandler type and type argument
More general tasks:
[ ] Delete the StatefulSagaOf type and all its dependencies
[ ] New convention to discover handlers suffixed as [SomethingSaga]
[ ] Modify Marten middleware to load the actual workflow state as the handler
[ ] Modify the EF Core middleware to load the actual workflow state as the handler
More analysis necessary....
How do we mark sagas as deleted? COULD return a command that would direct Jasper to do something next
I'll be straight up here, I don't like Jasper 1.0's stateful saga approach as well as older competitors, so let's make it better!!!
Ideas:
Saga
will be the message handlersSaga
types will be persistedHandle()
orConsume()
methodsCreate() : [SagaType]
methods or a constructor for a single argument will be considered to be the initiator methodsMethodCall
as much as possible, or derivatives thereofSagaId
members,[SagaName]Id
, or a member marked as[SagaIdentity]
. Keep the fallback to using the saga id header thoughConvert Test Harnesses First
For each copy/pasted version of
SagaTestHarness
Handle()
methods on theTSagaHandler
to theTSagaState
TSagaHandler
type and type argumentMore general tasks:
StatefulSagaOf
type and all its dependencies[SomethingSaga]
More analysis necessary....