本文目录导读:

在PHP中绘制上下文映射图(Context Map),通常会使用领域驱动设计(DDD)中的概念,下面我介绍几种主要的绘制方法和工具。
手绘方法(最常用)
基本元素
graph LR
A[限界上下文A] -->|通信关系| B[限界上下文B]
A -.->|事件驱动| C[限界上下文C]
A -.->|共享内核| D[限界上下文D]
关键标记
- 实线箭头:客户/供应商关系
- 虚线箭头:事件驱动或发布/订阅
- 双向箭头:共享内核或伙伴关系
- 线条+矩形:上下游关系
使用专业工具
PlantUML 示例
@startuml
!define BOUNDARY skinparam rectangle {
BackgroundColor lightblue
BorderColor blue
}
boundary "订单系统" as Order {
(下单)
(查询订单)
}
boundary "库存系统" as Inventory {
(库存查询)
(库存锁定)
}
Order -> Inventory : 锁定库存
Inventory --> Order : 库存不足通知
boundary "支付系统" as Payment {
(支付处理)
(退款)
}
Order -> Payment : 发起支付
Payment --> Order : 支付结果
@enduml
Mermaid.js 示例(Markdown友好)
graph TB
subgraph "用户管理上下文"
U1[用户注册]
U2[登录验证]
end
subgraph "订单上下文"
O1[创建订单]
O2[订单查询]
end
subgraph "支付上下文"
P1[支付处理]
P2[退款]
end
U1 --> O1
O1 --> P1
P1 --> O2
在线工具推荐
专业工具
- draw.io/diagrams.net:免费,支持团队协作
- Lucidchart:功能强大,有免费版
- Miro:在线白板,适合多人协作
代码生成工具
- PlantUML:文本生成图形
- Mermaid:Markdown友好
- Graphviz:灵活性强
PHP代码示例:生成上下文映射图
<?php
class ContextMapGenerator
{
private array $contexts = [];
private array $relations = [];
public function addContext(string $name, array $modules = []): void
{
$this->contexts[$name] = $modules;
}
public function addRelation(
string $from,
string $to,
string $type = 'upstream/downstream'
): void {
$this->relations[] = [
'from' => $from,
'to' => $to,
'type' => $type
];
}
public function generateMermaid(): string
{
$diagram = "graph TB\n";
// 生成上下文节点
foreach ($this->contexts as $name => $modules) {
$diagram .= " subgraph {$name}\n";
foreach ($modules as $index => $module) {
$diagram .= " {$name}_{$index}[{$module}]\n";
}
$diagram .= " end\n";
}
// 生成关系
foreach ($this->relations as $relation) {
$arrow = match($relation['type']) {
'event-driven' => '-.->',
'shared-kernel' => '<-->',
default => '-->'
};
$diagram .= " {$relation['from']} {$arrow} {$relation['to']}\n";
}
return $diagram;
}
}
// 使用示例
$map = new ContextMapGenerator();
$map->addContext('订单系统', ['创建订单', '订单查询', '订单管理']);
$map->addContext('库存系统', ['库存管理', '库存锁定', '库存预警']);
$map->addContext('支付系统', ['支付处理', '退款管理', '账务核对']);
$map->addRelation('订单系统', '库存系统', 'upstream/downstream');
$map->addRelation('订单系统', '支付系统', 'event-driven');
echo $map->generateMermaid();
最佳实践建议
- 保持简洁:每个上下文只显示核心模块(5-7个)
- 明确边界:使用颜色区分不同上下文
- 标注关系:清晰标注通信方式(REST、消息队列等)
- 版本控制:将图形源文件纳入版本管理
实际应用示例
graph TB
subgraph "用户上下文"
UC1[用户注册]
UC2[身份验证]
UC3[权限管理]
end
subgraph "商品上下文"
PC1[商品列表]
PC2[商品详情]
PC3[库存状态]
end
subgraph "订单上下文"
OC1[购物车]
OC2[下单流程]
OC3[订单追踪]
end
UC1 --> OC2
PC3 --> OC2
OC2 -.-> |MQ事件| UC3
选择哪种方式取决于你的具体需求:
- 团队协作:推荐使用在线工具如Miro
- 文档集成:使用Mermaid或PlantUML
- 代码驱动:编写生成脚本自动更新
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播
英超直播