摘要:事件風(fēng)暴事件風(fēng)暴就是把所有的關(guān)鍵參與者都召集到一個(gè)很寬敞的屋子里來開會(huì),并且使用便利貼來描述系統(tǒng)中發(fā)生的事情。一張桔黃色的便利貼代表一個(gè)領(lǐng)域事件,在上面用一句過去時(shí)的話描述曾經(jīng)發(fā)生過什么事情,格式一般是已。
一周前,參加了公司的一個(gè)架構(gòu)設(shè)計(jì)與建模的工作坊——『事件風(fēng)暴』。從某種意義上來說,這是一個(gè)關(guān)于架構(gòu)設(shè)計(jì)與軟件建模的工作坊。于是便閃現(xiàn)了一個(gè)靈感,便有了 Stepping.js。
當(dāng)我們結(jié)束事件風(fēng)暴(Event Stroming)的時(shí)候,我們需要拍照,又或者是其他手段來記錄下相關(guān)的內(nèi)容。因此,整理這些文檔又不是一個(gè)的容易的事。而事實(shí)上,我們只需要一個(gè) DSL(領(lǐng)域特定語言),我們就可以直接將這個(gè)文檔轉(zhuǎn)換為圖片,還有文檔等等的內(nèi)容。
因此,我寫了一個(gè)名為 Stepping 的工具,來簡化這方面的工作。
Stepping步驟一:安裝 Stepping
為了使用 Stepping,我們需要先安裝 Stepping,可以能過 yarn 或者 npm 來安裝:yarn global add stepping。
步驟二:設(shè)計(jì)領(lǐng)域模型
除此,我們還需要設(shè)計(jì)好系統(tǒng)相關(guān)的領(lǐng)域模型,如:
再以 DSL 的形式來描述這個(gè)模型:
domain: 庫存子域 aggregate: 庫存 event: 庫存已增加 event: 庫存已恢復(fù) event: 庫存已扣減 event: 庫存已鎖定 command: 編輯庫存 aggregate: 商品 event: 商品已創(chuàng)建 command: 添加商品
保存這個(gè)文件為phodal.ffffd,然后執(zhí)行stepping -i phodal.ffffd。就可以得到一個(gè) stepping.svg 的文件,這個(gè) SVG 文件便能得到上面的領(lǐng)域模型。
同時(shí),如果你愿意的話,你還可以在這個(gè) DDD 文件里寫上相關(guān)的聚合的 Model:
aggregate-detail: 商品 model: product field: id: int name: string number: string manufacturers: string
再執(zhí)行下 stepping -i phodal.ffffd,就可以得到一份前后端分離的示例 API 接口,即:
{ "count": 1, "next": null, "previous": null, "results": [ { "id": 0, "name": "name", "number": 0, "manufacturers": "manufacturers" } ] }
結(jié)合一下 moco 或者 pretender,就可以直接變成一個(gè) Mock 服務(wù)器。
在未來,我們還將結(jié)合這個(gè) Model 來與 Django 做集成——只需要寫好設(shè)計(jì)稿的 DSL,就可以生成相關(guān)的文檔。
末了,讓我們了解一下什么是領(lǐng)域風(fēng)暴。
事件風(fēng)暴事件風(fēng)暴就是把所有的關(guān)鍵參與者都召集到一個(gè)很寬敞的屋子里來開會(huì),并且使用便利貼來描述系統(tǒng)中發(fā)生的事情。
一張桔黃色的便利貼代表一個(gè)領(lǐng)域事件,在上面用一句過去時(shí)的話描述曾經(jīng)發(fā)生過什么事情,格式一般是:xx 已 xx。于是,我們需要整理系統(tǒng)相關(guān)的所有事件,也因此需要業(yè)務(wù)與開發(fā)人員共同進(jìn)行風(fēng)暴。如針對一個(gè)訂單,會(huì)有這么一些相關(guān)的事件:
訂單已創(chuàng)建
訂單已支付
訂單已投訴
訂單已撤銷
便會(huì)產(chǎn)生相關(guān)的便利貼:
再按事件發(fā)生的時(shí)間軸,來對這些事件發(fā)生的順序進(jìn)行排序:
緊接著,我們需要結(jié)合軟件的用戶的相關(guān)操作,寫著與這些操作相關(guān)的命令。然后,結(jié)合這些命令與事件。如訂單相關(guān)的命令就有:
提交訂單,可以觸發(fā)事件『訂單已創(chuàng)建』
提交投訴,可以觸發(fā)事件『訂單已投訴』
等等
完成這個(gè)之后, 我們就有了系統(tǒng)相關(guān)的所有事件與命令:
換句話來說,這些相關(guān)的事件與命令就是我們編寫細(xì)節(jié)代碼時(shí),需要完成的功能。最后,完成相關(guān)的聚合,我們就可以得到一份完整的模型:
依據(jù)這個(gè)模型,我們可以輕松地做出微服務(wù)設(shè)計(jì)。
歡迎試用,并在 GitHub 上提出建議:https://github.com/phodal/ste...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/82298.html
摘要:前后端分離的開發(fā)方式在最近幾年突然火起來,松哥認(rèn)為有兩方面的原因前端的發(fā)展。不變其實(shí)除了前后端交互方式發(fā)生變化之外,其他的地方都是不變的。 事情的起因是這樣的,有個(gè)星球的小伙伴向邀請松哥在知乎上回答一個(gè)問題,原題是: 前后端分離的時(shí)代,Java后臺程序員的技術(shù)建議? 松哥認(rèn)真看了下這個(gè)問題,感覺對于初次接觸前后端分離的小伙伴來說,可能都會(huì)存在這樣的疑問,于是決定通過這篇文章和大家聊一...
摘要:前后端分離的項(xiàng)目開發(fā)策略已經(jīng)不是什么新鮮東西了,網(wǎng)上介紹這方面的文章非常多。我自己是在年的時(shí)候接觸到的,對這種開發(fā)策略一直愛不釋手,不管新老項(xiàng)目都會(huì)首先用前后端分離的思維先去思考一番。 前后端分離的項(xiàng)目開發(fā)策略已經(jīng)不是什么新鮮東西了,網(wǎng)上介紹這方面的文章非常多。我自己是在14年的時(shí)候接觸到的,對這種開發(fā)策略一直愛不釋手,不管新老項(xiàng)目都會(huì)首先用前后端分離的思維先去思考一番。從14年到現(xiàn)在...
摘要:如何去解決這些問題前后端分離大部分的互聯(lián)網(wǎng)公司都分成了前端團(tuán)隊(duì)和后端團(tuán)隊(duì)。方案一采用架構(gòu)業(yè)界很多公司會(huì)采用,單頁應(yīng)用的架構(gòu),這種架構(gòu)是天然的前后端分離的。方案二淘寶的大前端方案中途島上圖是淘寶基于的前后端分離分層,以及的職責(zé)范圍。 我們遇到了什么問題? 1.前端無法調(diào)試后端未完成的 API:如果后端同學(xué)還沒有完成 API 開發(fā),那么前端同學(xué)就不能對這個(gè) API 進(jìn)行開發(fā)。之前我們都是在...
摘要:采用前后端分離模式可以減后臺負(fù)擔(dān),加快研發(fā)效率,當(dāng)然,前提是前端能做好的話。還是基礎(chǔ)不夠?qū)е碌暮蠖耸欠耧L(fēng)格很多公司采用了前后端分離模式后,后端仍然采用以往的傳統(tǒng)風(fēng)格,這是不合理的,風(fēng)格的應(yīng)該是前后端分離的最佳實(shí)踐。 showImg(https://segmentfault.com/img/bVFC8f?w=690&h=360);早期的web開發(fā)是不分前端后端的。互聯(lián)網(wǎng)進(jìn)入Web2.0時(shí)...
閱讀 1186·2021-11-24 09:39
閱讀 2690·2021-09-28 09:35
閱讀 1084·2019-08-30 15:55
閱讀 1378·2019-08-30 15:44
閱讀 887·2019-08-29 17:00
閱讀 1983·2019-08-29 12:19
閱讀 3321·2019-08-28 18:28
閱讀 701·2019-08-28 18:10