2012-09-21 2 views
1

J'utilise Raven persister et je veux sagas à mettre en œuvre IFindSagas, je dois trouver la saga basée sur 2 propriétés, SiteId & EmailAddress donc ConfigureMapping ne fonctionnera pas. L'interface ISagaPersister vous permet uniquement de rechercher une seule saga par une seule propriété.IFindSagas avec la persistance de la saga Raven et plusieurs propriétés dans NServiceBus

J'ai mis en place un chercheur de la saga comme celui-ci

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); 
    } 
} 

Donc, fondamentalement, j'ai ajouté une propriété sur MySagaData appelé SagaLookup qui est une concaténation de SiteId et EmailAddress. Je peux ensuite regarder par là. Cela ressemble à un hack. Y a-t-il un moyen d'utiliser la saga persister pour récupérer une saga par plusieurs propriétés ou récupérer une liste de sagas en fonction d'une propriété que je peux ensuite filtrer par l'autre propriété?

+2

Habituellement, c'est un signe qu'un concept de domaine est manquant. Qu'est-ce qui dans votre domaine est identifié par le siteId et un e-mail? –

+0

Une invitation de site utilisateur, il a été suggéré que je pourrais générer un identifiant unique pour chacun d'eux, mais je n'ai pas vraiment besoin de l'ID pour autre chose et essayait d'éviter plus de données –

+0

Je me suis rendu compte que je suis bête à ce sujet, je générais un code de validation d'une chaîne aléatoire et l'envoyais par email. Je vais maintenant utiliser un guid, l'utiliser comme identifiant de la saga et simplifier le tout, merci! –

Répondre

1

IMO Il est préférable de rechercher une seule propriété "clé" car vous n'avez pas besoin d'implémenter une persistance personnalisée. La concaténation de l'ID du site et de l'adresse e-mail peut sembler être un hack, mais si vous considérez cela comme la définition de l'ID de cette saga spécifique, alors cela a du sens. Les données saga ne font pas partie de votre modèle de domaine, elles font partie de l'infrastructure qui a des exigences spécifiques. Cependant, vous devriez considérer si cette définition de l'ID de saga est assez unique. Par exemple, serait-il possible que deux saga pour le même utilisateur dans le même ID de site s'exécutent en même temps?

Questions connexes