一週前,參加了公司的一個架構設計與建模的工做坊——『事件風暴』。從某種意義上來講,這是一個關於架構設計與軟件建模的工做坊。因而便閃現了一個靈感,便有了 Stepping.js。git
當咱們結束事件風暴(Event Stroming)的時候,咱們須要拍照,又或者是其餘手段來記錄下相關的內容。所以,整理這些文檔又不是一個的容易的事。而事實上,咱們只須要一個 DSL(領域特定語言),咱們就能夠直接將這個文檔轉換爲圖片,還有文檔等等的內容。github
所以,我寫了一個名爲 Stepping 的工具,來簡化這方面的工做。npm
步驟一:安裝 Stepping後端
爲了使用 Stepping,咱們須要先安裝 Stepping,能夠能過 yarn
或者 npm
來安裝:yarn global add stepping
。服務器
步驟二:設計領域模型架構
除此,咱們還須要設計好系統相關的領域模型,如:前後端分離
再以 DSL 的形式來描述這個模型:dom
domain: 庫存子域 aggregate: 庫存 event: 庫存已增長 event: 庫存已恢復 event: 庫存已扣減 event: 庫存已鎖定 command: 編輯庫存 aggregate: 商品 event: 商品已建立 command: 添加商品
保存這個文件爲phodal.ddd
,而後執行stepping -i phodal.ddd
。就能夠獲得一個 stepping.svg
的文件,這個 SVG 文件便能獲得上面的領域模型。svg
同時,若是你願意的話,你還能夠在這個 DDD 文件裏寫上相關的聚合的 Model:微服務
aggregate-detail: 商品 model: product field: id: int name: string number: string manufacturers: string
再執行下 stepping -i phodal.ddd
,就能夠獲得一份先後端分離的示例 API 接口,即:
{ "count": 1, "next": null, "previous": null, "results": [ { "id": 0, "name": "name", "number": 0, "manufacturers": "manufacturers" } ] }
結合一下 moco 或者 pretender,就能夠直接變成一個 Mock 服務器。
在將來,咱們還將結合這個 Model 來與 Django 作集成——只須要寫好設計稿的 DSL,就能夠生成相關的文檔。
末了,讓咱們瞭解一下什麼是領域風暴。
事件風暴就是把全部的關鍵參與者都召集到一個很寬敞的屋子裏來開會,而且使用便利貼來描述系統中發生的事情。
一張桔黃色的便利貼表明一個領域事件,在上面用一句過去時的話描述曾經發生過什麼事情,格式通常是:xx 已 xx。因而,咱們須要整理系統相關的全部事件,也所以須要業務與開發人員共同進行風暴。如針對一個訂單,會有這麼一些相關的事件:
訂單已建立
訂單已支付
訂單已投訴
訂單已撤銷
便會產生相關的便利貼:
再按事件發生的時間軸,來對這些事件發生的順序進行排序:
緊接着,咱們須要結合軟件的用戶的相關操做,寫着與這些操做相關的命令。而後,結合這些命令與事件。如訂單相關的命令就有:
提交訂單,能夠觸發事件『訂單已建立』
提交投訴,能夠觸發事件『訂單已投訴』
等等
完成這個以後, 咱們就有了系統相關的全部事件與命令:
換句話來講,這些相關的事件與命令就是咱們編寫細節代碼時,須要完成的功能。最後,完成相關的聚合,咱們就能夠獲得一份完整的模型:
依據這個模型,咱們能夠輕鬆地作出微服務設計。
歡迎試用,並在 GitHub 上提出建議:https://github.com/phodal/ste...