通常、Saga<T> を実装する 1 つのクラスを作成します。
public class MyClass1 : Saga<MySagaData>;
{
………
}
MySagaData コード:
[SagaIndex("ExternalCombinedIdentifier")]
[SagaIndex("MyOwnId")]
public class MySagaData: IContainSagaData
{
public MySagaData()
{
……
}
public Guid Id { get; set; }
public string Originator { get; set; }
public string OriginalMessageId { get; set; }
……
}
ここで、同じ Saga (Saga<MySagaData>) を別のクラスで使用する必要があります。それを MyClass2 と呼びましょう。
次のように MyClass2 を実装すると: public class MyClass2 : Saga<MySagaData> { ……… }
Saga<MySagaData> の ACID プロパティは、Saga<MySagaData> が 1 つのクラスで使用されているかのように、MyClass1 と MyClass2 に存在しますか? また、ACID プロパティには、たとえば、メッセージ ハンドラーをロールバックして MyClass1 で再試行します。他のクラス (MyClass2) の別のメッセージ ハンドラーが MySagaData への変更をコミットした場合はどうなりますか?