一周前,参加了公司的一个架构设计与建模的工做坊——『事件风暴』。从某种意义上来讲,这是一个关于架构设计与软件建模的工做坊。因而便闪现了一个灵感,便有了 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...