領域事件:架構
領域專家所關心的在領域中的一些事件。微服務
將領域中所發生的活動建模城一系列的離散事件。每一個事件都用領域對象來表示。工具
領域事件是領域模型的組成部分,表示領域中所發生的事情。spa
重要的事件確定會在系統其餘地方引發反應,所以理解爲何會有這些反應一樣也很重要。--- Martin Fowler對象
一個領域事件能夠理解爲是發生在一個特定領域中的事件,是你但願在同一個領域中其餘部分知道併產生後續動做的事件。可是並非全部發生過的事情均可以稱爲領域事件。一個領域事件必須對業務有價值,有助於造成完整的業務閉環,也即一個領域事件將致使進一步的業務操做。事件
領域事件能夠是業務流程中的一個步驟。擴展
若是在通用語言中存在「當a發生時,咱們就須要作到b。」這樣的描述,則代表a能夠定義成一個領域事件。領域事件的命名通常也是「產生事件的對象名稱 + 完成的動做的過去式」的形式。定時器
例如:訂單的發貨事件 OrderDispathedEvent方法
領域事件的優勢:命名
領域事件能夠是一種基於事件的架構。事件架構的好處是能夠把處理的業務解耦,實現系統的可擴展性,提升主業務流程的內聚性。
領域事件的特色:解決領域的聚合性問題、也是領域分析的工具。領域事件能夠經過觀察者模式和訂閱模式進行實現。比較常見的實現就是事件總線。
事件風暴:
事件風暴也稱爲事件建模,相似頭腦風暴,經過事件風暴的方法能夠快速分析複雜業務領域,完成領域建模的目標。
事件風暴是一項團隊活動,旨在經過領域事件識別出聚合根,今兒劃分微服務的限界上下文。在活動中,團隊先經過頭腦風暴的形式羅列出領域中的全部的領域事件,整合以後造成最終的領域事件集合,而後對於每個事件,標註出致使該事件的命令,而後再爲每一個事件標註出命令發起方的角色,命令能夠是用戶發起的,也能夠是第三方系統調用或者是定時器觸發等。最後對事件進行分類這裏出聚合根以及限界上下文。
可以引起事件的事情包括用戶行爲、外部系統所發生的事情以及時間的流逝。事件也有助於找到領域的邊界,對屬於的不一樣闡述可能就意味着存在邊界。
事件風暴中咱們關注的東西:
事件 -> 某個動做的結果
屬性 -> 事件的輸入、輸出
命令 -> 某個動做
實體 -> 命令的觸發者
簡單理解就是誰(實體)使用什麼(輸入)作了什麼(命令、動做)產生了什麼(輸出)影響了什麼(事件)。