您可以捐助,支持我们的公益事业。

1元 10元 50元





认证码:  验证码,看不清楚?请点击刷新验证码 必填



  求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
   
 
 
     
   
 订阅
  捐助
Stepping.js——两步完成前后端分离架构设计
 
来源:网络 发布于 2017-4-13
   次浏览      
 

一周前,参加了公司的一个架构设计与建模的工作坊——『事件风暴』。从某种意义上来说,这是一个关于架构设计与软件建模的工作坊。于是便闪现了一个灵感,便有了 Stepping.js。

当我们结束事件风暴(Event Stroming)的时候,我们需要拍照,又或者是其他手段来记录下相关的内容。因此,整理这些文档又不是一个的容易的事。而事实上,我们只需要一个 DSL(领域特定语言),我们就可以直接将这个文档转换为图片,还有文档等等的内容。

因此,我写了一个名为 Stepping 的工具,来简化这方面的工作。

Stepping

步骤一:安装 Stepping

为了使用 Stepping,我们需要先安装 Stepping,可以能过 yarn 或者 npm 来安装:yarn global add stepping。

步骤二:设计领域模型

除此,我们还需要设计好系统相关的领域模型,如:

再以 DSL 的形式来描述这个模型:

domain: 库存子域
aggregate: 库存
event: 库存已增加
event: 库存已恢复
event: 库存已扣减
event: 库存已锁定
command: 编辑库存

aggregate: 商品
event: 商品已创建
command: 添加商品

保存这个文件为phodal.ddd,然后执行stepping -i phodal.ddd。就可以得到一个 stepping.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。于是,我们需要整理系统相关的所有事件,也因此需要业务与开发人员共同进行风暴。如针对一个订单,会有这么一些相关的事件:

订单已创建

订单已支付

订单已投诉

订单已撤销

便会产生相关的便利贴:

再按事件发生的时间轴,来对这些事件发生的顺序进行排序:

紧接着,我们需要结合软件的用户的相关操作,写着与这些操作相关的命令。然后,结合这些命令与事件。如订单相关的命令就有:

提交订单,可以触发事件『订单已创建』

提交投诉,可以触发事件『订单已投诉』

等等

完成这个之后, 我们就有了系统相关的所有事件与命令:

换句话来说,这些相关的事件与命令就是我们编写细节代码时,需要完成的功能。最后,完成相关的聚合,我们就可以得到一份完整的模型:

依据这个模型,我们可以轻松地做出微服务设计。

   
次浏览       
相关文章 相关文档 相关课程



深度解析:清理烂代码
如何编写出拥抱变化的代码
重构-使代码更简洁优美
团队项目开发"编码规范"系列文章
重构-改善既有代码的设计
软件重构v2
代码整洁之道
高质量编程规范
基于HTML5客户端、Web端的应用开发
HTML 5+CSS 开发
嵌入式C高质量编程
C++高级编程
最新活动计划
LLM大模型应用与项目构建 12-26[特惠]
QT应用开发 11-21[线上]
C++高级编程 11-27[北京]
业务建模&领域驱动设计 11-15[北京]
用户研究与用户建模 11-21[北京]
SysML和EA进行系统设计建模 11-28[北京]

Android手机开发(一)
理解Javascript
非典型ajax实践
彻底的Ajax
javascript 使用Cookies
使用 jQuery 简化 Ajax 开发
更多...   

Struts+Spring+Hibernate
基于J2EE的Web 2.0应用开发
J2EE设计模式和性能调优
Java EE 5企业级架构设计
Java单元测试方法与技术
Java编程方法与技术

某航空公司IT部 JavaScript实践
某电视软件 HTML5和JavaScript
中航信 JavaScript高级应用开发
大庆油田 web界面Ajax开发技术
和利时 使用AJAX进行WEB应用开发
更多...