horizon client 无法识别域_「领域驱动设计DDD」事件风暴简介:实现域驱动设计的简便方法...
事件風暴是一種快速,輕量級且未得到充分認可的群體建模技術,它對于加速開發團隊而言非常強大,有趣且有用。作為Alberto Brandolini的心血結晶,它是Gamestorming和領域驅動設計(DDD)原則的綜合學習實踐。該技術不限于軟件開發。您可以將其應用于幾乎任何技術或業務領域,尤其是那些大型,復雜或兩者兼而有之的領域。
事件風暴催化并加速小組學習,通常在幾小時或幾天內實現更傳統的建模技術從未做過的事情 - 對軟件必須運行的領域的共同理解。
要了解事件風暴,您首先需要了解兩個關鍵術語。域事件是域專家感興趣的任何事件。域專家對數據庫,Web套接字或設計模式不感興趣,但對業務領域感興趣。域事件以不指定特定實現的方式捕獲這些事實。
事件風暴如何運作
您運行一個輔助研討會進行一個活動風暴會議。每個人都參與其中,并且協調人使團隊保持專注和參與,指導進展到完整的域模型。該小組從域事件開始,向前和向后遍歷模型以確保所有內容都被覆蓋。然后,該組添加導致事件的命令或觸發器,并考慮所有命令源,包括用戶,外部系統甚至時間。
該組識別接受命令和完成事件的聚合,并開始將聚合分組到有界上下文中。在此過程中,識別關鍵測試場景,用戶和目標并將其合并到模型中。最后,添加有界上下文之間的關系以創建上下文映射。然后用代碼對所得模型進行挑戰,以驗證組學習并驗證模型。
雖然DDD社區的事件風暴正在增長,但在該專業之外幾乎不為人知。這是一種恥辱,因為只有主持人必須是DDD從業者才能指導小組走向完整的模型。包括非技術產品所有者在內的每個人都可以參與對域的理解和建模。整個團隊了解域越好,軟件實施越有可能反映域,這是DDD的主要目的。
走得更快
如果你可以完成這個項目,你剛剛重新完成了,同一個團隊,知道你現在知道什么,你能夠更快地完成它嗎?
是的,因為你已經學會了成功所需要的知識。小組學習速度慢是軟件開發過程中的主要制約因素。正如Brandolini所說,“軟件開發是一個學習過程;工作代碼是一個副作用。”
域事件有助于構建域模型;它們起到了骨骼的作用。這不是設計,它是關于域的模型 - 一個視角。您使用域事件來推動建模,因為技術人員和領域專家都很容易理解。域事件幾乎沒有關于設計的說明,也沒有關于實現的內容,這正是你想要的一個好的域模型。
一種不同的建模方法
更傳統的DDD建模工作通常由小組或個人開發人員完成,有時在與產品所有者就數據,對象或行為進行幾次對話之后。不幸的是,這開始建模的程度太接近實現域,而不是局限于業務領域。如果您從數據建模開始,您的思考和對話將很快轉移到模式,事務和其他與業務領域無關的事情。如果從行為建模開始,當您將行為分解為任務并將其鏈接到流程時,您會分心。
這些是實現概念,而不是業務領域概念。雖然有很多選擇來表示數據和實現行為,但域事件沒有其他選擇。由于域事件表示域的事實,因此這些事件僅在基礎業務發生更改時才會發生顯著變化。因此,域事件是您模型的更穩定和更具彈性的腳手架。
但是這種方法有一個更令人信服的理由:將初始討論限制在域事件中會迫使每個人,特別是開發人員,專注于域的無處不在的語言。他們必須學習它,定義它,改進它,并在有關模型的對話中專門使用它。
雖然以域事件為中心的模型可能會自然地導致事件驅動的系統設計(EDA),例如事件源或命令查詢責任隔離(CQRS),但這是一種選擇,而不是義務。實現模型的軟件不必是事件驅動的,甚至不是面向對象的(盡管這些通常是很好的選擇)。
加速小組學習
想想你完成的最后一個項目。開發人員必須做些什么才能理解域模型并構建系統?在發揮故事的過程中,開發人員可能會在域專家,解決方案架構師,測試用戶和其他團隊成員之間穿梭。雖然這個過程可能會導致所有團隊成員對整個域的共同理解,但這不太可能。轉移的領域知識過于稀疏,過于分離,過于孤立,而且過于分散,無法在任何單個開發人員的腦海中產生完整的模型,更不用說整個團隊理解的常見模型。
相反,這些對話可以在事件風暴會話期間發生。通常這些對話是按順序發生的,但是在事件發生時,它們都會立即發生。通過這種方式,您可以解決域中任何部分的任何沖突或不連續性,同時所涉及的每個人都在場并參與其中。
DDD的最大障礙是開發人員傾向于專注于他們非常了解的事物 - 軟件開發概念 - 而不是業務領域。當非技術人員(例如產品所有者或用戶擁護者)與開發人員會面并開始用編程術語而不是商業術語描述系統時,可以看到這種情況的一個癥狀。如果開發人員不了解域,則無法正確建模。
何時何地使用事件風暴
使用事件風暴最明顯的時間是在項目開始時,因此團隊可以從對域模型的共同理解開始。使用事件風暴的另一個高回報時間是項目結束的一部分,用于捕獲和分享團隊在構建軟件過程中學到的知識。這很重要,因為沒有任何一個開發人員可能因為偶然的發現,修改以及對其他區域的有限暴露而了解整個域。使用較小規模的事件風暴也是有利的,例如當您考慮改變某些事物,開始新故事或制定不同的場景或替代方案時。
嘗試一下
事件風暴旨在創建和分享對域模型的共同理解;它不是設計文檔,流程圖,UML圖,部署計劃,體系結構圖或與實現相關的任何其他內容的替代品??梢詫⑵湟暈榈捅U?#xff0c;臨時信息輻射器,用于與其他人共享和確認域模型。
嘗試一下暴力事件,你將獲得多種好處。使用協作組學習,您將實現快速的域驅動建模,而無需每個人都必須成為DDD專家,您的團隊和術語將與業務領域專家的一致。這個過程非正式且價格低廉 - 您只需要紙張,便簽和筆,您就可以很好地加快團隊的工作效率。
請關注公眾號:【首席架構師智庫】
討論:請加入知識星球【首席架構師圈】或者小號【jiagoushi_pro】或者QQ群【11107777】
總結
以上是生活随笔為你收集整理的horizon client 无法识别域_「领域驱动设计DDD」事件风暴简介:实现域驱动设计的简便方法...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python如何读二进制文件_pytho
- 下一篇: python读取csv某些行_【Pyth