2016-03-28 28 views
1

我對域名事件有疑問。我正在使用DDD實現應用程序,並且該應用程序對於DDD來說足夠複雜。確認狀態的域名事件

我所擁有的場景是登錄WCF服務,除了驗證用戶憑證和返回令牌之外,還需要服務來創建會話並審計登錄。爲此,我爲會話和審計創建了兩個獨立的域上下文,因爲它們在登錄範圍之外我打算在自己的域上下文中引發域事件來處理這些事件,所有這些都很好,並且在每個組件之間保持明確的有界上下文。

問題是,Wcf實現的一部分在SharedKernel中,因爲所有Wcf服務都需要處理Token的令牌驗證,該令牌需要從客戶端傳遞給Wcf服務以確保安全。令牌的驗證需要檢查是否存在有效的會話(例如,數據庫中有相同令牌的記錄並且沒有過期),我正在努力如何最好地實現這一點並且有一些想法

  1. 我相信由於Session是在它自己的有界上下文中,所以我應該提出一個返回結果的同步域事件,畢竟我只需要一個真/假確認對於令牌
  2. 或;我可以在Shared Kernel中實現一個Domain Context來處理這個問題,但這意味着在共享內核中有可能存在域實體和EF上下文,並且可能在Session的有界上下文之外。

我真的很困擾哪一個是最好的方法,有沒有人遇到過類似的東西,你會有什麼建議用最佳實踐來實現?域名事件是我需要實現的正確方法嗎?

回答

0

我想你可能使這個更復雜,比它需要:)

人們通常對這類事情的身份&訪問控制界上下文更難。那麼,I肯定會把它們放在那裏。卑詩省與您的領域模型很少有關,所以人們可以從支持角色的角度來思考它。

A 同步域事件可能並不完全正確的命名。你當然可能需要一個同步調用。

所有這些交互都會發生在應用程序服務層,您的域不應該隨着它的移動而挖掘任何較低的基礎結構類型位。如果您需要使用這些值,請將基於域的表示形式傳遞給您的域。

我過去使用的是簡單地登錄用戶,創建會話,並將會話作爲單個任務進行審計。其他下游系統將呼叫中央端點(在我的情況下是其餘api)以檢索指定令牌的會話VO。雖然您目前只需要確認true/false確認,但您最終可能會得到一些關於結果的有趣數據,例如Upn用於冒充,Claims,ExpiryDate等。下游系統知道會話何時到期,因此完全有可能緩存頻繁請求的會話。A 系統事件可能會發布從我& A BC應該明確註銷用戶。這將允許下游系統訂閱(例如)SessionEndedEvent消息並移除緩存的會話。

正如一個側面沒有,我已經開始從基於消息的事件不同的接近域事件(一拉服務總線),因爲我覺得含有比其可在應用服務層,在那裏信息較少域事件可以生成系統事件。這可能是爲什麼域名事件與事件採購非常吻合的原因。