2012-09-21 53 views
1

多個屬性我使用烏鴉堅持傳奇,我想實現IFindSagas,我需要找到基於兩個屬性的傳奇,SiteId & EmailAddress所以ConfigureMapping將無法​​正常工作。 ISagaPersister界面只允許您查看單個屬性的單個傳奇。IFindSagas與掠奪傳奇的持久性和NServiceBus

我實現了一個傳奇取景器這樣

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

所以基本上我也添加了SagaLookupMySagaData一個屬性,它是SiteIdEmailAddress的串聯。我可以通過這個來查找它。這感覺像一個黑客。有沒有什麼方法可以使用傳奇持久物,我可以通過多個屬性獲得傳奇,或者根據一個屬性獲取傳奇列表,然後我可以通過其他屬性進行過濾?

+2

通常這是一個表示域概念丟失的標誌。 siteId和電子郵件標識了您的域中的哪些內容? –

+0

用戶網站的邀請,有人建議我可以爲每個人生成一個唯一的ID,但我並不真的需要其他任何ID,並試圖避免更多的數據 –

+0

我意識到我是愚蠢的關於這一點,我正在生成一個隨機字符串的驗證碼並通過電子郵件發送出去。我現在要使用guid,並將其用作傳奇標識符並簡化整個事物,謝謝! –

回答

1

IMO最好通過一個「key」屬性來查找,因爲那樣你就不需要實現一個自定義persist。連接站點ID和電子郵件地址可能看起來像一個黑客,但如果你認爲這是定義該特定傳奇的ID,那麼它是有道理的。傳奇數據不屬於您的領域模型,它是具有特定要求的基礎架構的一部分。但是,您應該考慮這個傳奇ID的定義是否足夠獨特。例如,對於同一個站點ID中的同一個用戶來說,是否有可能同時執行兩個傳奇?