1

Ravenを使用してサガを永続化しています。実装したいのですがIFindSagas、2つのプロパティに基づいてサガを見つける必要があるため、機能しません。このインターフェースでは、単一のプロパティで単一のサガを検索することしかできません。SiteIdEmailAddressConfigureMappingISagaPersister

私はこのようなサガファインダーを実装しました

public class MySagaFinder : IFindSagas<MySagaData>.Using<ISomeMessage>
{
    public ISagaPersister Persister { get; set; }

    public MySagaData FindBy(ISomeMessage message)
    {
        var lookup = string.Format("{0}__{1}", message.SiteId, message.EmailAddress);
        return Persister.Get<MySagaData>("SagaLookup", lookup);
    }
}

したがって、基本的には、との連結であるMySagaDatacalledにプロパティを追加しました。これで調べられます。これはハックのように感じます。sagaパーシスターを使用して、複数のプロパティでsagaを取得したり、1つのプロパティに基づいてsagaのリストを取得したりして、他のプロパティでフィルタリングしたりする方法はありますか?SagaLookupSiteIdEmailAddress

4

1 に答える 1

1

IMOは、カスタムパーシスタを実装する必要がないため、単一の「キー」プロパティで検索するのが最適です。サイトIDと電子メールアドレスを連結することはハックのように思えるかもしれませんが、それをその特定のサガのIDを定義するものと考えるなら、それは理にかなっています。sagaデータはドメインモデルの一部ではなく、特定の要件を持つインフラストラクチャの一部です。ただし、このsagaIDの定義が十分に一意であるかどうかを検討する必要があります。たとえば、同じサイトIDの同じユーザーの2つのサガが同時に実行される可能性はありますか?

于 2012-09-21T02:32:34.877 に答える