Skip to content

约定标准

命名

所有的设计器实例都赋值给变量名d(小写字母)

ts
const d = createDomainDesigner()

如需要频繁调用d.info函数,则将这个函数赋值给变量名i(小写字母)

ts
const i = d.info

变量名可以用中文,只要你愿意

ts
const 创建用户命令 = d.command(
  'CreateUserCommand',
  ['userName'],
  '创建用户命令'
)
为啥用中文?

主要原因是:我们这里的任务是设计与分析,本来就很害怕把同一个词搞出两个叫法。如果事后有人看着这个设计图和需求文档,阴差阳错地发生了“中译英译中”的事件,又产生了什么微妙的误解反而得不偿失,为什么不直接用中文呢。

次要原因是:ts 能支持中文变量名,而且用起来没什么问题

函数签名

在本工具的 api 设计方面,所有函数接受的参数都不大于 3 个

第一个参数通常是名称、最后一个参数通常是可选的备注、、如果该元素有子元素那么第二个参数就是节点的内容

如:

ts
// 定义一个有唯一id意义的值,
// 它的名称是`bookId`,
// 它的备注是`图书id`
d.info.id('bookId', '图书id')
// 定义一个command节点,
// 它的名称是`RegisterBookCommand`,
// 它的内容是`isbn`、`bookName`,
// 它的备注是`注册图书命令`
d.command('RegisterBookCommand', ['isbn', 'bookName'], '注册图书命令')

结构

根目录下的每一个 ts 文件各自就是一个模块。这些 ts 文件中,都定义且仅定义 1 个设计器实例,同时默认导出 1 个设计器实例

ts
import { createDomainDesigner } from '@ddd-tool/domain-designer-core'
const d = createDomainDesigner()
// IMPL 进行图书模块的设计
export default d
ts
import { createDomainDesigner } from '@ddd-tool/domain-designer-core'
const d = createDomainDesigner()
// IMPL 进行用户模块的设计
export default d

如果随着业务变得复杂,同一个模块需要拆分为多个文件,则以模块名作为前缀,新建一个文件夹来存放拆分后的代码

ts
import { d } from './book-detail/common'
import './book-detail/book'
import './book-detail/order'
export default d
ts
import { d, i } from './book-detail/common'
// IMPL 进行订单聚合的设计
ts
import { d, i } from './book-detail/common'
// IMPL 进行图书聚合的设计
ts
import { createDomainDesigner } from '@ddd-tool/domain-designer-core'
export const d = createDomainDesigner()
export const i = d.info