领域驱动设计(一、理论学习)
断 更 那 么 久 , g i t 也 没 更 , 也 没 回 复 , 期 间 不 断 有 人 关 注 , 感 觉 关 注 了 个 寂 寞 , 其 实 挺 不 好 意 思 的 , 不 过 , 关 注 我 的 就 佛 系 点 吧 , 我 并 没 那 么 高 产 , 仅 仅 把 所 认 知 的 , 认 为 好 的 整 理 整 理 。 网 上 集 成 工 作 流 f l o w a b l e , 基 本 没 看 到 正 确 的 , 后 续 也 会 更 新 我 的 集 成 思 路 。 不 过 这 篇 文 章 主 要 介 绍 D D D 架 构 思 想 方 面 的 。
前 言 : 微 服 务 拆 分 很 难 , 拆 不 好 的 话 , 看 似 解 耦 , 其 实 只 是 把 耦 合 放 在 了 链 接 的 桥 梁 上 , 一 旦 大 多 数 需 求 都 要 通 过 桥 梁 才 能 实 现 , 必 然 既 增 加 了 两 边 的 工 作 量 也 增 加 了 复 杂 的 桥 梁 成 本 。 因 此 , 拆 分 既 要 拆 分 的 ‘ 小 ’ , 也 要 拆 分 的 ‘ 专 ’ 。 拆 分 的 粒 度 也 要 根 据 业 务 场 景 , 团 队 情 况 进 行 充 分 考 虑 。 因 此 我 们 尝 试 D D D 的 架 构 思 想 , 看 能 不 能 指 导 我 们 合 理 的 进 行 微 服 务 的 架 构 设 计 。
高
质
量
代
码
:
当
用
户
提
出
一
个
需
求
变
更
时
,
为
了
实
现
这
个
变
更
而
修
改
软
件
的
成
本
越
低
,
软
件
的
设
计
质
量
就
越
高
。
开 放 - 封 闭 原 则
对 于 功 能 扩 展 是 开 放 的 , 即 当 系 统 需 求 变 更 时 , 可 以 对 软 件 功 能 进 行 扩 展 。
对 于 软 件 代 码 的 修 改 是 封 闭 的 , 即 在 修 改 软 件 的 同 时 不 影 响 原 有 的 功 能 , 也 即 在 不 修 改 原 有 代 码 的 基 础 上 实 现 新 的 功 能 。
单
一
职
责
原
则
软 件 系 统 中 每 个 元 素 只 完 成 自 己 职 责 范 围 内 的 事 , 而 将 其 他 的 事 交 给 别 人 去 做 , 我 们 只 去 调 用 。 一 个 职 责 就 是 软 件 变 化 的 一 个 原 因 。
什 么 是 D D D ?
领 域 驱 动 设 计 最 初 由 E r i c E v a n s 提 出 ( 2 0 0 6 年 的 《 领 域 驱 动 设 计 》 ) , 但 是 多 年 以 来 一 直 停 留 在 理 念 阶 段 , 真 正 能 实 现 并 且 落 地 的 项 目 和 公 司 少 之 又 少 , 而 进 来 阿 里 内 部 其 实 在 大 力 推 行 D D D 的 理 念 , 它 主 要 可 以 帮 助 我 们 解 决 传 统 单 体 式 集 中 架 构 难 以 快 速 响 应 业 务 需 求 落 地 的 问 题 , 并 且 针 对 中 台 和 微 服 务 盛 行 的 场 景 做 出 指 导 。 D D D 为 我 们 提 供 的 是 架 构 设 计 的 方 法 论 , 既 面 向 技 术 也 面 向 业 务 , 从 业 务 的 角 度 来 把 握 设 计 方 案 。
D
D
D
的
作
用
?
想 一 想 业 务 的 不 断 变 更 , 如 何 还 能 把 握 整 体 的 业 务 架 构 设 计 的 清 晰 度 ?
运 用 D D D , 当 系 统 业 务 变 得 越 来 越 复 杂 时 , 将 我 们 对 业 务 的 理 解 绘 制 成 领 域 模 型 来 正 确 的 指 导 软 件 开 发 。
业 务 进 行 解 耦 , 微 服 务 拆 分 , 如 何 确 定 边 界 ?
D
D
D
核
心
思
想
:
通
过
领
域
驱
动
设
计
方
法
定
义
领
域
模
型
,
从
而
确
定
业
务
和
应
用
边
界
,
保
证
业
务
模
型
与
代
码
模
型
的
一
致
性
。
统 一 思 想 : 统 一 项 目 各 方 业 务 、 产 品 、 开 发 对 问 题 的 认 知 , 而 不 是 开 发 和 产 品 统 一 , 业 务 又 和 产 品 统 一 从 而 产 生 分 歧 。
明 确 分 工 : 域 模 型 需 要 明 确 定 义 来 解 决 方 方 面 面 的 问 题 , 而 针 对 这 些 问 题 则 形 成 了 团 队 分 钟 的 理 解 。
反 映 变 化 : 需 求 是 不 断 变 化 的 , 因 此 我 们 的 模 型 也 是 在 不 断 的 变 化 的 。 领 域 模 型 则 可 以 真 实 的 反 映 这 些 变 化 。
边 界 分 离 : 领 域 模 型 与 数 据 模 型 分 离 , 用 领 域 模 型 来 界 定 哪 些 需 求 在 什 么 地 方 实 现 , 保 持 结 构 清 晰 。
D
D
D
概
念
实 体
有 唯 一 标 志 的 核 心 领 域 对 象 , 且 这 个 标 志 在 整 个 软 件 生 命 周 期 中 都 不 会 发 生 变 化 。 这 个 概 念 和 我 们 平 时 软 件 模 型 中 和 数 据 库 打 交 道 的 M o d e l 实 例 比 较 接 近 , 唯 一 不 同 的 是 D D D 中 这 些 实 体 会 包 含 与 该 实 体 相 关 的 业 务 逻 辑 , 它 是 操 作 行 为 的 载 体 。
值 对 象
依 附 于 实 体 存 在 , 通 过 对 象 属 性 来 识 别 的 对 象 , 它 将 一 些 相 关 的 实 体 属 性 打 包 在 一 起 处 理 , 形 成 一 个 新 的 对 象 。
举 个 栗 子 : 比 如 用 户 实 体 , 包 含 用 户 名 、 密 码 、 年 龄 、 地 址 , 地 址 又 包 含 省 市 区 等 属 性 , 而 将 省 市 区 这 些 属 性 打 包 成 一 个 属 性 集 合 就 是 值 对 象 。
聚 合
实 体 和 值 对 象 表 现 的 是 个 体 的 能 力 , 而 我 们 的 业 务 逻 辑 往 往 很 复 杂 , 依 赖 个 体 是 无 法 完 成 的 , 这 时 候 就 需 要 多 个 实 体 和 值 对 象 一 起 协 同 工 作 , 而 这 个 协 同 的 组 织 就 是 聚 合 。 聚 合 是 数 据 修 改 和 持 久 化 的 基 本 单 元 , 同 一 个 聚 合 内 要 保 证 事 务 的 一 致 性 , 所 以 在 设 计 的 时 候 要 保 证 聚 合 的 设 计 拆 分 到 最 小 化 以 保 证 效 率 和 性 能 。
聚 合 根
也 叫 做 根 实 体 , 一 个 特 殊 的 实 体 , 它 是 聚 合 的 管 理 者 , 代 表 聚 合 的 入 口 , 抓 住 聚 合 根 可 以 抓 住 整 个 聚 合 。
领 域 服 务
有 些 领 域 的 操 作 是 一 些 动 词 , 并 不 能 简 单 的 把 他 们 归 类 到 某 个 实 体 或 者 值 对 象 中 。 这 样 的 行 为 从 领 域 中 识 别 出 来 之 后 应 该 将 它 声 明 成 一 个 服 务 , 它 的 作 用 仅 仅 是 为 领 域 提 供 相 应 的 功 能 。
领 域 事 件
在
特
定
的
领
域
由
用
户
动
作
触
发
,
表
示
发
生
在
过
去
的
事
件
。
比
如
充
值
成
功
、
充
值
失
败
的
事
件
。
四
种
模
式
失 血 模 型
模 型 中 只 有 简 单 的 g e t s e t 方 法 , 是 对 一 个 实 体 最 简 单 的 封 装 , 其 他 所 有 的 业 务 行 为 由 服 务 类 来 完 成 。
贫 血 模 型
在 失 血 模 型 基 础 之 上 聚 合 了 业 务 领 域 行 为 , 领 域 对 象 的 状 态 变 化 停 留 在 内 存 层 面 , 不 关 心 数 据 持 久 化 。
充 血 模 型
在 贫 血 模 型 基 础 上 , 负 责 数 据 的 持 久 化 。
胀 血 模 型
s e r v i c e 都 不 需 要 , 所 有 的 业 务 逻 辑 、 数 据 存 储 都 放 到 一 个 类 中 。
对 于 D D D 来 说 , 失 血 和 胀 血 都 是 不 合 适 的 , 失 血 太 轻 量 没 有 聚 合 , 胀 血 那 是 初 学 者 才 这 样 写 代 码 。 那 么 充 血 模 型 和 贫 血 模 型 该 怎 么 选 择 ? 充 血 模 型 依 赖 r e p o s i t o r y 接 口 , 与 数 据 存 储 紧 密 相 关 , 有 破 坏 程 序 稳 定 性 的 风 险 。
建 模 方 法
用 例 分 析 法
用 例 分 析 法 是 领 域 建 模 最 简 单 可 行 的 方 式 。 大 致 可 以 分 为 获 取 用 例 、 收 集 实 体 、 添 加 关 联 、 添 加 属 性 、 模 型 精 化 几 个 步 骤 。
-
获 取 用 例 : 提 取 领 域 规 则 描 述
-
收 集 实 体 : 定 位 实 体 ,
-
添 加 关 联 : 两 个 实 体 间 用 动 词 关 联 起 来
-
添 加 属 性 : 获 取 实 体 属 性
-
模 型 精 化 : 可 选 的 步 骤 , 可 以 用 U M L 的 泛 华 和 组 合 来 表 达 模 型 间 的 关 系 , 同 时 可 以 做 子 领 域 的 划 分
四 色 建 模 法
四 色 建 模 法 源 于 《 J a v a M o d e l i n g I n C o l o r W i t h U M L 》 , 它 是 一 种 模 型 的 分 析 和 设 计 方 法 , 通 过 把 所 有 模 型 分 为 四 种 类 型 , 帮 助 模 型 做 到 清 晰 、 可 追 溯 。
简 单 来 说 , 四 色 关 注 的 是 某 个 人 的 角 色 在 某 个 地 点 的 角 色 用 某 个 东 西 的 角 色 做 了 某 件 事 情 。
事 件 风 暴 法
事 件 风 暴 法 类 似 头 脑 风 暴 , 简 单 来 说 就 是 谁 在 何 时 基 于 什 么 做 了 什 么 , 产 生 了 什 么 , 影 响 了 什 么 事 情 。
微 服 务 架 构 模 型 现 有 的 选 择 模 型 包 括 : 整 洁 架 构 、 C Q R S 和 六 边 形 架 构 、 D D D 分 层 架 构 等 。
每 种 架 构 模 式 虽 然 提 出 的 时 代 和 背 景 不 同 , 但 其 核 心 理 念 都 是 为 了 设 计 出 “ 高 内 聚 低 耦 合 ” 的 架 构 , 轻 松 实 现 架 构 演 进 。 D D D 分 层 架 构 的 思 想 使 架 构 边 界 变 得 越 来 越 清 晰 , 这 是 D D D 的 优 点 。
( 一 ) 、 整 洁 架 构
在
整
洁
架
构
里
,
同
心
圆
代
表
应
用
软
件
的
不
同
部
分
,
从
里
到
外
依
次
是
领
域
模
型
、
领
域
服
务
、
应
用
服
务
和
最
外
围
的
容
易
变
化
的
内
容
,
比
如
用
户
界
面
和
基
础
设
施
。
整
洁
架
构
最
主
要
的
原
则
是
依
赖
原
则
,
它
定
义
了
各
层
的
依
赖
关
系
,
越
往
里
依
赖
越
低
,
代
码
级
别
越
高
,
越
是
核
心
能
力
。
外
圆
代
码
依
赖
只
能
指
向
内
圆
,
内
圆
不
需
要
知
道
外
圆
的
任
何
情
况
。
( 二 ) 、 六 边 形 架 构
六
边
形
架
构
的
核
心
理
念
是
:
应
用
是
通
过
端
口
与
外
部
进
行
交
互
的
。
也
就
是
说
,
在
下
图
的
六
边
形
架
构
中
,
红
圈
内
的
核
心
业
务
逻
辑
(
应
用
程
序
和
领
域
模
型
)
与
外
部
资
源
(
包
括
A
P
P
、
W
e
b
应
用
以
及
数
据
库
资
源
等
)
完
全
隔
离
,
仅
通
过
适
配
器
进
行
交
互
。
它
解
决
了
业
务
逻
辑
与
用
户
界
面
的
代
码
交
错
问
题
,
很
好
地
实
现
了
前
后
端
分
离
。
六
边
形
架
构
各
层
的
依
赖
关
系
与
整
洁
架
构
一
样
,
都
是
由
外
向
内
依
赖
。
六
边
形
架
构
的
一
个
端
口
可
能
对
应
多
个
外
部
系
统
,
不
同
的
外
部
系
统
也
可
能
会
使
用
不
同
的
适
配
器
,
由
适
配
器
负
责
协
议
转
换
。
这
就
使
得
应
用
程
序
能
够
以
一
致
的
方
式
被
用
户
、
程
序
、
自
动
化
测
试
和
批
处
理
脚
本
使
用
。
( 三 ) 、 D D D 分 层 架 构
从
上
到
下
依
次
是
:
用
户
接
口
层
、
应
用
层
、
领
域
层
和
基
础
层
。
-
用 户 接 口 层
-
应 用 层
用 户 接 口 层 负 责 向 用 户 显 示 信 息 和 解 释 用 户 指 令 。
这 里 的 用 户 可 能 是 : 用 户 、 程 序 、 自 动 化 测 试 和 批 处 理 脚 本 等 等 。
应 用 层 是 很 薄 的 一 层 , 理 论 上 不 应 该 有 业 务 规 则 或 逻 辑 , 主 要 面 向 用 例 和 流 程 相 关 的 操 作 。
位 于 领 域 层 之 上 , 领 域 层 包 含 多 个 聚 合 , 所 以 它 可 以 协 调 多 个 聚 合 的 服 务 和 领 域 对 象 完 成 服 务 编 排 和 组 合 , 协 作 完 成 业 务 操 作 。
应 用 层 也 是 微 服 务 之 间 交 互 的 通 道 , 它 可 以 调 用 其 它 微 服 务 的 应 用 服 务 , 完 成 微 服 务 之 间 的 服 务 组 合 和 编 排 。
注 意 :
在 设 计 和 开 发 时 , 不 要 将 本 该 放 在 领 域 层 的 业 务 逻 辑 放 到 应 用 层 中 实 现 。 因 为 庞 大 的 应 用 层 会 使 领 域 模 型 失 焦 , 时 间 一 长 你 的 微 服 务 就 会 演 化 为 传 统 的 三 层 架 构 , 业 务 逻 辑 会 变 得 混 乱 。
应 用 服 务 是 在 应 用 层 的 , 它 负 责 服 务 的 组 合 、 编 排 和 转 发 , 负 责 处 理 业 务 用 例 的 执 行 顺 序 以 及 结 果 的 拼 装 , 以 粗 粒 度 的 服 务 通 过 A P I 网 关 向 前 端 发 布 。
应 用 服 务 还 可 以 进 行 安 全 认 证 、 权 限 校 验 、 事 务 控 制 、 发 送 或 订 阅 领 域 事 件 等 。
3 . 领 域 层
领 域 层 的 作 用 是 实 现 企 业 核 心 业 务 逻 辑 , 通 过 各 种 校 验 手 段 保 证 业 务 的 正 确 性 。
领 域 层 主 要 体 现 领 域 模 型 的 业 务 能 力 , 它 用 来 表 达 业 务 概 念 、 业 务 状 态 和 业 务 规 则 。
领 域 层 包 含 聚 合 根 、 实 体 、 值 对 象 、 领 域 服 务 等 领 域 模 型 中 的 领 域 对 象 。
注 意 :
领 域 模 型 的 业 务 逻 辑 主 要 是 由 实 体 和 领 域 服 务 来 实 现 的 , 其 中 实 体 会 采 用 充 血 模 型 来 实 现 所 有 与 之 相 关 的 业 务 功 能 。
实 体 和 领 域 服 务 在 实 现 业 务 逻 辑 上 不 是 同 级 的 , 当 领 域 中 的 某 些 功 能 , 单 一 实 体 ( 或 者 值 对 象 ) 不 能 实 现 时 , 领 域 服 务 就 会 出 马 , 它 可 以 组 合 聚 合 内 的 多 个 实 体 ( 或 者 值 对 象 ) , 实 现 复 杂 的 业 务 逻 辑 。
4 . 基 础 层
基 础 层 是 贯 穿 所 有 层 的 , 它 的 作 用 就 是 为 其 它 各 层 提 供 通 用 的 技 术 和 基 础 服 务 , 包 括 第 三 方 工 具 、 驱 动 、 消 息 中 间 件 、 网 关 、 文 件 、 缓 存 以 及 数 据 库 等 。 比 较 常 见 的 功 能 还 是 提 供 数 据 库 持 久 化 。
基 础 层 包 含 基 础 服 务 , 它 采 用 依 赖 倒 置 设 计 , 封 装 基 础 资 源 服 务 , 实 现 应 用 层 、 领 域 层 与 基 础 层 的 解 耦 , 降 低 外 部 资 源 变 化 对 应 用 的 影 响 。
5 . 三 层 架 构 向 D D D 分 层 架 构 演 进 :
D D D 分 层 架 构 中 的 要 素 其 实 和 三 层 架 构 类 似 , 只 是 在 D D D 分 层 架 构 中 , 这 些 要 素 被 重 新 归 类 , 重 新 划 分 了 层 , 确 定 了 层 与 层 之 间 的 交 互 规 则 和 职 责 边 界 。
-
三 层 架 构 向 D D D 分 层 架 构 演 进 , 主 要 发 生 在 业 务 逻 辑 层 和 数 据 访 问 层 。
D D D 分 层 架 构 在 用 户 接 口 层 引 入 了 D T O , 给 前 端 提 供 了 更 多 的 可 使 用 数 据 和 更 高 的 展 示 灵 活 性 。 -
D D D 分 层 架 构 对 三 层 架 构 的 业 务 逻 辑 层 进 行 了 更 清 晰 的 划 分 , 改 善 了 三 层 架 构 核 心 业 务 逻 辑 混 乱 , 代 码 改 动 相 互 影 响 大 的 情 况 。
-
D D D 分 层 架 构 将 业 务 逻 辑 层 的 服 务 拆 分 到 了 应 用 层 和 领 域 层 。 应 用 层 快 速 响 应 前 端 的 变 化 , 领 域 层 实 现 领 域 模 型 的 能 力 。
-
在 数 据 访 问 层 和 基 础 层 之 间 : 三 层 架 构 数 据 访 问 采 用 D A O 方 式 ; D D D 分 层 架 构 的 数 据 库 等 基 础 资 源 访 问 , 采 用 了 仓 储 ( R e p o s i t o r y ) 设 计 模 式 , 通 过 依 赖 倒 置 实 现 各 层 对 基 础 资 源 的 解 耦 。 仓 储 又 分 为 两 部 分 : 仓 储 接 口 和 仓 储 实 现 。 仓 储 接 口 放 在 领 域 层 中 , 仓 储 实 现 放 在 基 础 层 。 原 来 三 层 架 构 通 用 的 第 三 方 工 具 包 、 驱 动 、 C o m m o n 、 U t i l i t y 、 C o n f i g 等 通 用 的 公 共 的 资 源 类 统 一 放 到 了 基 础 层 。
三
种
模
型
对
比
-
重 点 关 注 图 中 的 红 色 线 框 , 它 们 是 非 常 重 要 的 分 界 线 , 这 三 种 架 构 里 面 都 有 , 它 的 作 用 就 是 将 核 心 业 务 逻 辑 与 外 部 应 用 、 基 础 资 源 进 行 隔 离 。
-
红 色 框 内 部 主 要 实 现 核 心 业 务 逻 辑 , 划 分 了 应 用 层 和 领 域 层 , 来 承 担 不 同 的 业 务 逻 辑 。
-
领 域 层 实 现 面 向 领 域 模 型 , 实 现 领 域 模 型 的 核 心 业 务 逻 辑 , 属 于 原 子 模 型 , 它 需 要 保 持 领 域 模 型 和 业 务 逻 辑 的 稳 定 , 对 外 提 供 稳 定 的 细 粒 度 的 领 域 服 务 , 所 以 它 处 于 架 构 的 核 心 位 置 。
-
应 用 层 实 现 面 向 用 户 操 作 相 关 的 用 例 和 流 程 , 对 外 提 供 粗 粒 度 的 A P I 服 务 。 它 就 像 一 个 齿 轮 一 样 进 行 前 台 应 用 和 领 域 层 的 适 配 , 接 收 前 台 需 求 , 随 时 做 出 响 应 和 调 整 , 尽 量 避 免 将 前 台 需 求 传 导 到 领 域 层 。 应 用 层 作 为 配 速 齿 轮 则 位 于 前 台 应 用 和 领 域 层 之 间 。
关
注
三
个
方
面
:
1
.
如
何
拆
分
和
设
计
,
使
软
件
维
护
与
发
布
不
困
难
。
2
.
面
对
需
求
不
断
变
化
,
使
开
发
质
量
与
交
付
速
度
不
变
慢
。
3
.
如
何
通
过
领
域
建
模
确
认
和
规
划
系
统
边
界
,
如
何
抽
象
技
术
中
台
。
实
践
参
考
:
D D D 并 没 有 给 出 标 准 的 代 码 模 型 , 不 同 的 人 可 能 会 有 不 同 理 解 。
根 据 D D D 分 层 架 构 模 型 建 立 了 标 准 的 微 服 务 代 码 模 型 , 在 代 码 模 型 里 面 , 各 代 码 对 象 各 据 其 位 、 各 司 其 职 , 共 同 协 作 完 成 微 服 务 的 业 务 逻 辑 。 它 包 括 用 户 接 口 层 、 应 用 层 、 领 域 层 和 基 础 层 , 分 层 架 构 各 层 的 职 责 边 界 非 常 清 晰 , 又 能 有 条 不 紊 地 分 层 协 作 。
-
用 户 接 口 层 : 面 向 前 端 提 供 服 务 适 配 , 面 向 资 源 层 提 供 资 源 适 配 。 这 一 层 聚 集 了 接 口 适 配 相 关 的 功 能 。
-
应 用 层 职 责 : 实 现 服 务 组 合 和 编 排 , 适 应 业 务 流 程 快 速 变 化 的 需 求 。 这 一 层 聚 集 了 应 用 服 务 和 事 件 相 关 的 功 能 。
-
领 域 层 : 实 现 领 域 的 核 心 业 务 逻 辑 。 这 一 层 聚 集 了 领 域 模 型 的 聚 合 、 聚 合 根 、 实 体 、 值 对 象 、 领 域 服 务 和 事 件 等 领 域 对 象 , 以 及 它 们 组 合 所 形 成 的 业 务 能 力 。
-
基 础 层 : 贯 穿 所 有 层 , 为 各 层 提 供 基 础 资 源 服 务 。 这 一 层 聚 集 了 各 种 底 层 资 源 相 关 的 服 务 和 能 力 。
详 细 介 绍 :
在 严 格 分 层 架 构 模 式 下 , 不 允 许 服 务 的 跨 层 调 用 , 每 个 服 务 只 能 调 用 它 的 下 一 层 服 务 。 服 务 从 下 到 上 依 次 为 : 实 体 方 法 、 领 域 服 务 和 应 用 服 务 。 建 议 采 用 服 务 逐 层 封 装 的 方 式 , 服 务 的 封 装 和 调 用 主 要 有 以 下 几 种 方 式 :
1 . 微 服 务 一 级 目 录 结 构
微 服 务 一 级 目 录 是 按 照 D D D 分 层 架 构 的 分 层 职 责 来 定 义 的 。 从 下 面 这 张 图 中 , 我 们 可 以 看 到 , 在 代 码 模 型 里 分 别 为 用 户 接 口 层 、 应 用 层 、 领 域 层 和 基 础 层 , 建 立 了 i n t e r f a c e s 、 a p p l i c a t i o n 、 d o m a i n 和 i n f r a s t r u c t u r e 四 个 一 级 代 码 目 录 。
2 . 用 户 接 口 层 目 录 结 构 、 职 能 和 代 码 形 态
主 要 存 放 用 户 接 口 层 与 前 端 交 互 、 展 现 数 据 相 关 的 代 码 。 前 端 应 用 通 过 这 一 层 的 接 口 , 向 应 用 服 务 获 取 展 现 所 需 的 数 据 。 这 一 层 主 要 用 来 处 理 用 户 发 送 的 R e s t f u l 请 求 , 解 析 用 户 输 入 的 配 置 文 件 , 并 将 数 据 传 递 给 A p p l i c a t i o n 层 。 数 据 的 组 装 、 数 据 传 输 格 式 以 及 F a c a d e 接 口 等 代 码 都 会 放 在 这 一 层 目 录 里 。
-
A s s e m b l e r : 实 现 D T O 与 领 域 对 象 之 间 的 相 互 转 换 和 数 据 交 换 。 一 般 来 说 A s s e m b l e r 与 D T O 总 是 一 同 出 现 。
-
D t o : 它 是 数 据 传 输 的 载 体 , 内 部 不 存 在 任 何 业 务 逻 辑 , 我 们 可 以 通 过 D T O 把 内 部 的 领 域 对 象 与 外 界 隔 离 。
-
F a c a d e : 提 供 较 粗 粒 度 的 调 用 接 口 , 将 用 户 请 求 委 派 给 一 个 或 多 个 应 用 服 务 进 行 处 理 。
3 . 应 用 层 目 录 结 构 、 职 能 和 代 码 形 态
主 要 存 放 应 用 层 服 务 组 合 和 编 排 相 关 的 代 码 。 应 用 服 务 向 下 基 于 微 服 务 内 的 领 域 服 务 或 外 部 微 服 务 的 应 用 服 务 完 成 服 务 的 编 排 和 组 合 , 向 上 为 用 户 接 口 层 提 供 各 种 应 用 数 据 展 现 支 持 服 务 。 应 用 服 务 和 事 件 等 代 码 会 放 在 这 一 层 目 录 里 。
-
E v e n t ( 事 件 ) : 这 层 目 录 主 要 存 放 事 件 相 关 的 代 码 。 它 包 括 两 个 子 目 录 : p u b l i s h 和 s u b s c r i b e 。 前 者 主 要 存 放 事 件 发 布 相 关 代 码 , 后 者 主 要 存 放 事 件 订 阅 相 关 代 码 ( 事 件 处 理 相 关 的 核 心 业 务 逻 辑 在 领 域 层 实 现 ) 。 为 了 实 现 事 件 的 统 一 管 理 , 建 议 你 将 微 服 务 内 所 有 事 件 的 发 布 和 订 阅 的 处 理 都 统 一 放 到 应 用 层 , 事 件 相 关 的 核 心 业 务 逻 辑 实 现 放 在 领 域 层 。 通 过 应 用 层 调 用 领 域 层 服 务 , 来 实 现 完 整 的 事 件 发 布 和 订 阅 处 理 流 程 。
-
S e r v i c e ( 应 用 服 务 ) : 这 层 的 服 务 是 应 用 服 务 。 应 用 服 务 会 对 多 个 领 域 服 务 或 外 部 应 用 服 务 进 行 封 装 、 编 排 和 组 合 , 对 外 提 供 粗 粒 度 的 服 务 。 应 用 服 务 主 要 实 现 服 务 组 合 和 编 排 , 是 一 段 独 立 的 业 务 逻 辑 。 你 可 以 将 所 有 应 用 服 务 放 在 一 个 应 用 服 务 类 里 , 也 可 以 把 一 个 应 用 服 务 设 计 为 一 个 应 用 服 务 类 , 以 防 应 用 服 务 类 代 码 量 过 大 。
应 用 层 的 领 域 对 象 分 析
应
用
层
的
主
要
领
域
对
象
是
应
用
服
务
和
事
件
的
发
布
以
及
订
阅
。
在
事
件
风
暴
或
领
域
故
事
分
析
时
,
我
们
往
往
会
根
据
用
户
或
系
统
发
起
的
命
令
,
来
设
计
服
务
或
实
体
方
法
。
为
了
响
应
这
个
命
令
,
我
们
需
要
分
析
和
记
录
:
-
在 应 用 层 和 领 域 层 分 别 会 发 生 哪 些 业 务 行 为 ;
-
各 层 分 别 需 要 设 计 哪 些 服 务 或 者 方 法 ;
-
这 些 方 法 和 服 务 的 分 层 以 及 领 域 类 型 ( 比 如 实 体 方 法 、 领 域 服 务 和 应 用 服 务 等 ) , 它 们 之 间 的 调 用 和 组 合 的 依 赖 关 系 。
4 . 领 域 层 目 录 结 构 、 职 能 和 代 码 形 态
主 要 存 放 领 域 层 核 心 业 务 逻 辑 相 关 的 代 码 。 领 域 层 可 以 包 含 多 个 聚 合 代 码 包 , 它 们 共 同 实 现 领 域 模 型 的 核 心 业 务 逻 辑 。 聚 合 以 及 聚 合 内 的 实 体 、 方 法 、 领 域 服 务 和 事 件 等 代 码 会 放 在 这 一 层 目 录 里 。
-
A g g r e g a t e ( 聚 合 ) : 它 是 聚 合 软 件 包 的 根 目 录 , 可 以 根 据 实 际 项 目 的 聚 合 名 称 命 名 , 比 如 权 限 聚 合 。 在 聚 合 内 定 义 聚 合 根 、 实 体 和 值 对 象 以 及 领 域 服 务 之 间 的 关 系 和 边 界 。 聚 合 内 实 现 高 内 聚 的 业 务 逻 辑 , 它 的 代 码 可 以 独 立 拆 分 为 微 服 务 。 以 聚 合 为 单 位 的 代 码 放 在 一 个 包 里 的 主 要 目 的 是 为 了 业 务 内 聚 , 而 更 大 的 目 的 是 为 了 以 后 微 服 务 之 间 聚 合 的 重 组 。 聚 合 之 间 清 晰 的 代 码 边 界 , 可 以 让 你 轻 松 地 实 现 以 聚 合 为 单 位 的 微 服 务 重 组 , 在 微 服 务 架 构 演 进 中 有 着 很 重 要 的 作 用 。
-
E n t i t y ( 实 体 ) : 它 存 放 聚 合 根 、 实 体 、 值 对 象 以 及 工 厂 模 式 ( F a c t o r y ) 相 关 代 码 。 实 体 类 采 用 充 血 模 型 , 同 一 实 体 相 关 的 业 务 逻 辑 都 在 实 体 类 代 码 中 实 现 。 跨 实 体 的 业 务 逻 辑 代 码 在 领 域 服 务 中 实 现 。
-
E v e n t ( 事 件 ) : 它 存 放 事 件 实 体 以 及 与 事 件 活 动 相 关 的 业 务 逻 辑 代 码 。
-
S e r v i c e ( 领 域 服 务 ) : 它 存 放 领 域 服 务 代 码 。 一 个 领 域 服 务 是 多 个 实 体 组 合 出 来 的 一 段 业 务 逻 辑 。 你 可 以 将 聚 合 内 所 有 领 域 服 务 都 放 在 一 个 领 域 服 务 类 中 , 你 也 可 以 把 每 一 个 领 域 服 务 设 计 为 一 个 类 。 如 果 领 域 服 务 内 的 业 务 逻 辑 相 对 复 杂 , 建 议 将 一 个 领 域 服 务 设 计 为 一 个 领 域 服 务 类 , 避 免 由 于 所 有 领 域 服 务 代 码 都 放 在 一 个 领 域 服 务 类 中 , 而 出 现 代 码 臃 肿 的 问 题 。 领 域 服 务 封 装 多 个 实 体 或 方 法 后 向 上 层 提 供 应 用 服 务 调 用 。
-
R e p o s i t o r y ( 仓 储 ) : 它 存 放 所 在 聚 合 的 查 询 或 持 久 化 领 域 对 象 的 代 码 , 通 常 包 括 仓 储 接 口 和 仓 储 实 现 方 法 。 为 了 方 便 聚 合 的 拆 分 和 组 合 , 我 们 设 定 了 一 个 原 则 : 一 个 聚 合 对 应 一 个 仓 储 。 ( 特 别 说 明 : 按 照 D D D 分 层 架 构 , 仓 储 实 现 本 应 该 属 于 基 础 层 代 码 , 但 为 了 在 微 服 务 架 构 演 进 时 , 保 证 代 码 拆 分 和 重 组 的 便 利 性 , 把 聚 合 仓 储 实 现 的 代 码 放 到 了 聚 合 包 内 。 )
领 域 层 的 领 域 对 象 分 析
事 件 风 暴 结 束 时 , 领 域 模 型 聚 合 内 一 般 会 有 : 聚 合 、 实 体 、 命 令 和 领 域 事 件 等 领 域 对 象 。
在 完 成 故 事 分 析 和 微 服 务 设 计 后 , 微 服 务 的 聚 合 内 一 般 会 有 : 聚 合 、 聚 合 根 、 实 体 、 值 对 象 、 领 域 事 件 、 领 域 服 务 和 仓 储 等 领 域 对 象 。
(
1
)
.
设
计
实
体
大
多
数
情
况
下
,
领
域
模
型
的
业
务
实
体
与
微
服
务
的
数
据
库
实
体
是
一
一
对
应
的
。
但
某
些
领
域
模
型
的
实
体
在
微
服
务
设
计
时
,
可
能
会
被
设
计
为
多
个
数
据
实
体
,
或
者
实
体
的
某
些
属
性
被
设
计
为
值
对
象
。
在
分
层
架
构
里
,
实
体
采
用
充
血
模
型
,
在
实
体
类
内
实
现
实
体
的
全
部
业
务
逻
辑
。
这
些
不
同
的
实
体
都
有
自
己
的
方
法
和
业
务
行
为
,
比
如
地
址
实
体
有
新
增
和
修
改
地
址
的
方
法
,
银
行
账
号
实
体
有
新
增
和
修
改
银
行
账
号
的
方
法
。
实
体
类
放
在
领
域
层
的
E
n
t
i
t
y
目
录
结
构
下
。
(
2
)
.
找
出
聚
合
根
聚
合
根
来
源
于
领
域
模
型
,
聚
合
根
是
一
种
特
殊
的
实
体
,
它
有
自
己
的
属
性
和
方
法
。
聚
合
根
可
以
实
现
聚
合
之
间
的
对
象
引
用
,
还
可
以
引
用
聚
合
内
的
所
有
实
体
。
-
在 个 人 客 户 聚 合 里 , 个 人 客 户 这 个 实 体 是 聚 合 根 , 它 负 责 管 理 地 址 、 电 话 以 及 银 行 账 号 的 生 命 周 期 。
-
个 人 客 户 聚 合 根 通 过 工 厂 和 仓 储 模 式 , 实 现 聚 合 内 地 址 、 银 行 账 号 等 实 体 和 值 对 象 数 据 的 初 始 化 和 持 久 化 。
聚 合 根 类 放 在 代 码 模 型 的 E n t i t y 目 录 结 构 下 。 聚 合 根 有 自 己 的 实 现 方 法 , 比 如 生 成 客 户 编 码 , 新 增 和 修 改 客 户 信 息 等 方 法 。
( 3 ) . 设 计 值 对 象
根 据 需 要 将 某 些 实 体 的 某 些 属 性 或 属 性 集 设 计 为 值 对 象 。 值 对 象 类 放 在 代 码 模 型 的 E n t i t y 目 录 结 构 下 。
在 个 人 客 户 聚 合 中 , 客 户 拥 有 客 户 证 件 类 型 , 它 是 以 枚 举 值 的 形 式 存 在 , 所 以 将 它 设 计 为 值 对 象 。
有 些 领 域 对 象 可 以 设 计 为 值 对 象 , 也 可 以 设 计 为 实 体 , 我 们 需 要 根 据 具 体 情 况 来 分 析 : -
如 果 这 个 领 域 对 象 在 其 它 聚 合 内 维 护 生 命 周 期 , 且 在 它 依 附 的 实 体 对 象 中 只 允 许 整 体 替 换 , 我 们 就 可 以 将 它 设 计 为 值 对 象 。
-
如 果 这 个 对 象 是 多 条 且 需 要 基 于 它 做 查 询 统 计 , 建 议 将 它 设 计 为 实 体 。
( 4 ) . 设 计 领 域 事 件
如 果 领 域 模 型 中 领 域 事 件 会 触 发 下 一 步 的 业 务 操 作 , 我 们 就 需 要 设 计 领 域 事 件 。 -
首 先 确 定 领 域 事 件 发 生 在 微 服 务 内 还 是 微 服 务 之 间 。
-
然 后 设 计 事 件 实 体 对 象 , 事 件 的 发 布 和 订 阅 机 制 , 以 及 事 件 的 处 理 机 制 。
-
判 断 是 否 需 要 引 入 事 件 总 线 或 消 息 中 间 件 。
领 域 事 件 实 体 和 处 理 类 放 在 领 域 层 的 E v e n t 目 录 结 构 下 。 领 域 事 件 的 发 布 和 订 阅 类 建 议 放 在 应 用 层 的 E v e n t 目 录 结 构 下 。
( 5 ) . 设 计 领 域 服 务
如 果 一 个 业 务 动 作 或 行 为 跨 多 个 实 体 , 我 们 就 需 要 设 计 领 域 服 务 。
领 域 服 务 通 过 对 多 个 实 体 和 实 体 方 法 进 行 组 合 , 完 成 核 心 业 务 逻 辑 。 可 以 认 为 领 域 服 务 是 位 于 实 体 方 法 之 上 和 应 用 服 务 之 下 的 一 层 业 务 逻 辑 。
按 照 严 格 分 层 架 构 层 的 依 赖 关 系 : -
如 果 实 体 的 方 法 需 要 暴 露 给 应 用 层 , 它 需 要 封 装 成 领 域 服 务 后 才 可 以 被 应 用 服 务 调 用 。
-
如 果 有 的 实 体 方 法 需 要 被 前 端 应 用 调 用 , 我 们 会 将 它 封 装 成 领 域 服 务 , 然 后 再 封 装 为 应 用 服 务 。
领 域 服 务 类 放 在 领 域 层 的 S e r v i c e 目 录 结 构 下 。
强 调 :
聚 合 之 间 的 代 码 边 界 一 定 要 清 晰 。
代 码 分 层 严 格
(
6
)
.
设
计
仓
储
每
一
个
聚
合
都
有
一
个
仓
储
,
仓
储
主
要
用
来
完
成
数
据
查
询
和
持
久
化
操
作
。
仓
储
包
括
仓
储
的
接
口
和
仓
储
实
现
,
通
过
依
赖
倒
置
实
现
应
用
业
务
逻
辑
与
数
据
库
资
源
逻
辑
的
解
耦
。
仓
储
代
码
放
在
领
域
层
的
R
e
p
o
s
i
t
o
r
y
目
录
结
构
下
。
5 . 基 础 层 层 目 录 结 构 、 职 能 和 代 码 形 态
主 要 存 放 基 础 资 源 服 务 相 关 的 代 码 , 为 其 它 各 层 提 供 的 通 用 技 术 能 力 、 三 方 软 件 包 、 数 据 库 服 务 、 配 置 和 基 础 资 源 服 务 的 代 码 都 会 放 在 这 一 层 目 录 里 。
-
C o n f i g : 主 要 存 放 配 置 相 关 代 码 。
-
U t i l : 主 要 存 放 平 台 、 开 发 框 架 、 消 息 、 数 据 库 、 缓 存 、 文 件 、 总 线 、 网 关 、 第 三 方 类 库 、 通 用 算 法 等 基 础 代 码 , 你 可 以 为 不 同 的 资 源 类 别 建 立 不 同 的 子 目 录 。
边 界 问 题 :
在 事 件 风 暴 中 , 我 们 会 梳 理 出 业 务 过 程 中 的 用 户 操 作 、 事 件 以 及 外 部 依 赖 关 系 等 , 根 据 这 些 要 素 梳 理 出 实 体 等 领 域 对 象 。
-
根 据 实 体 对 象 之 间 的 业 务 关 联 性 , 将 业 务 紧 密 相 关 的 多 个 实 体 进 行 组 合 形 成 聚 合 , 聚 合 之 间 是 第 一 层 边 界 。
-
根 据 业 务 及 语 义 边 界 等 因 素 将 一 个 或 者 多 个 聚 合 划 定 在 一 个 限 界 上 下 文 内 , 形 成 领 域 模 型 , 限 界 上 下 文 之 间 的 边 界 是 第 二 层 边 界 。
方 便 理 解 , 我 们 将 这 些 边 界 细 分 为 : 逻 辑 边 界 、 物 理 边 界 和 代 码 边 界
( 一 ) 逻 辑 边 界
微 服 务 内 聚 合 之 间 的 边 界 就 是 逻 辑 边 界 。 它 是 一 个 虚 拟 的 边 界 , 强 调 业 务 的 内 聚 , 可 根 据 需 要 变 成 物 理 边 界 , 也 就 是 说 聚 合 也 可 以 独 立 为 微 服 务 。 随 着 业 务 的 快 速 发 展 , 如 果 某 一 个 微 服 务 遇 到 了 高 性 能 挑 战 , 需 要 将 部 分 业 务 能 力 独 立 出 去 , 我 们 就 可 以 以 聚 合 为 单 位 , 将 聚 合 代 码 拆 分 独 立 为 一 个 新 的 微 服 务 , 这 样 就 可 以 很 容 易 地 实 现 微 服 务 的 拆 分 。 同 样 也 可 以 对 多 个 微 服 务 内 有 相 似 功 能 的 聚 合 进 行 功 能 和 代 码 重 组 , 组 合 为 新 的 聚 合 和 微 服 务 , 独 立 为 通 用 微 服 务
( 二 ) 物 理 边 界
微
服
务
之
间
的
边
界
是
物
理
边
界
。
它
强
调
微
服
务
部
署
和
运
行
的
隔
离
,
关
注
微
服
务
的
服
务
调
用
、
容
错
和
运
行
等
。
将
集
中
式
单
体
应
用
拆
分
为
微
服
务
时
,
首
先
进
行
的
往
往
不
是
建
立
领
域
模
型
,
而
只
是
按
照
业
务
功
能
将
原
来
单
体
应
用
的
一
个
软
件
包
拆
分
成
多
个
所
谓
的
“
微
服
务
”
软
件
包
,
而
这
些
“
微
服
务
”
内
的
代
码
仍
然
是
集
中
式
三
层
架
构
的
模
式
,
“
微
服
务
”
内
的
代
码
高
度
耦
合
,
逻
辑
边
界
不
清
晰
,
这
里
我
们
暂
且
称
它
为
“
小
单
体
微
服
务
”
。
这
种
单
体
式
微
服
务
只
定
义
了
一
个
维
度
的
边
界
,
也
就
是
微
服
务
之
间
的
物
理
边
界
,
本
质
上
还
是
单
体
架
构
模
式
。
微
服
务
设
计
时
要
考
虑
的
不
仅
仅
只
有
这
一
个
边
界
,
别
忘
了
还
要
定
义
好
微
服
务
内
的
逻
辑
边
界
和
代
码
边
界
( 三 ) 代 码 边 界
不 同 层 或 者 聚 合 之 间 代 码 目 录 的 边 界 是 代 码 边 界 。
协 作 :
服 务 的 调 用 ( 三 类 主 要 场 景 )
微 服 务 的 服 务 调 用 包 括 三 类 主 要 场 景 : 微 服 务 内 跨 层 服 务 调 用 , 微 服 务 之 间 服 务 调 用 和 领 域 事 件 驱 动 。
微 服 务 内 跨 层 服 务 调 用 :
-
第 一 种 是 应 用 服 务 调 用 并 组 装 领 域 服 务 。 此 时 领 域 服 务 会 组 装 实 体 和 实 体 方 法 , 实 现 核 心 领 域 逻 辑 。 领 域 服 务 通 过 仓 储 服 务 获 取 持 久 化 数 据 对 象 , 完 成 实 体 数 据 初 始 化 。
-
第 二 种 是 应 用 服 务 直 接 调 用 仓 储 服 务 。 这 种 方 式 主 要 针 对 像 缓 存 、 文 件 等 类 型 的 基 础 层 数 据 访 问 。 这 类 数 据 主 要 是 查 询 操 作 , 没 有 太 多 的 领 域 逻 辑 , 不 经 过 领 域 层 , 不 涉 及 数 据 库 持 久 化 对 象 。
微 服 务 之 间 的 服 务 调 用 :
微 服 务 之 间 的 应 用 服 务 可 以 直 接 访 问 , 也 可 以 通 过 A P I 网 关 访 问 。
由 于 跨 微 服 务 操 作 , 在 进 行 数 据 新 增 和 修 改 操 作 时 , 你 需 关 注 分 布 式 事 务 , 保 证 数 据 的 一 致 性 。
领 域 事 件 驱 动
领 域 事 件 驱 动 包 括 微 服 务 内 和 微 服 务 之 间 的 事 件 。
-
微 服 务 内 通 过 事 件 总 线 ( E v e n t B u s ) 完 成 聚 合 之 间 的 异 步 处 理 。
-
微 服 务 之 间 通 过 消 息 中 间 件 完 成 。 异 步 化 的 领 域 事 件 驱 动 机 制 是 一 种 间 接 的 服 务 访 问 方 式 。
当 应 用 服 务 业 务 逻 辑 处 理 完 成 后 , 如 果 发 生 领 域 事 件 , 可 调 用 事 件 发 布 服 务 , 完 成 事 件 发 布 。
当 接 收 到 订 阅 的 主 题 数 据 时 , 事 件 订 阅 服 务 会 调 用 事 件 处 理 领 域 服 务 , 完 成 进 一 步 的 业 务 操 作 。
数 据 对 象 : -
数 据 持 久 化 对 象 P O ( P e r s i s t e n t O b j e c t ) , 与 数 据 库 结 构 一 一 映 射 , 是 数 据 持 久 化 过 程 中 的 数 据 载 体 。
-
领 域 对 象 D O ( D o m a i n O b j e c t ) , 微 服 务 运 行 时 的 实 体 , 是 核 心 业 务 的 载 体 。
-
数 据 传 输 对 象 D T O ( D a t a T r a n s f e r O b j e c t ) , 用 于 前 端 与 应 用 层 或 者 微 服 务 之 间 的 数 据 组 装 和 传 输 , 是 应 用 之 间 数 据 传 输 的 载 体 。
-
视 图 对 象 V O ( V i e w O b j e c t ) , 用 于 封 装 展 示 层 指 定 页 面 或 组 件 的 数 据 。
总
结
:
D D D 是 一 套 完 善 的 方 法 论 , 他 能 帮 助 我 们 合 理 的 对 系 统 进 行 架 构 设 计 , 同 时 , 好 的 模 板 应 该 是 在 不 断 的 适 应 变 化 , 而 D D D 也 能 帮 助 我 们 更 快 速 更 方 便 的 支 撑 业 务 的 发 展 。