Jeden Skill in Manus ausführen
mit einem Klick
mit einem Klick
Jeden Skill in Manus mit einem Klick ausführen
Loslegen$pwd:
$ git log --oneline --stat
stars:43
forks:11
updated:25. Mai 2026 um 13:32
SKILL.md
以聚合根为边界,包含多个相关Entity和ValueObject的集合。保证数据一致性和事务边界。
在DDD中具有唯一身份标识和生命周期的对象,通过身份而非属性值相等判断。
封装复杂对象和聚合的创建过程,将创建职责从领域对象中剥离,保证聚合创建时的不变量满足。
没有身份标识,通过属性值判断相等的对象。不可变,通常代表领域中的度量或描述。
命令查询责任分离,将数据的写入操作和读取操作分别用不同的模型处理,优化各自的性能。
对比 MVC 模式与 DDD 方法论的差异,分析 MVC 在复杂业务下的局限性,帮助团队判断何时应采用 DDD。
| name | 微服务中的DDD |
| description | 将DDD战略设计应用于微服务架构,限界上下文指导服务拆分,领域事件实现服务间通信。 |
DDD 的战略设计天然适合微服务架构:一个限界上下文 = 一个微服务。
┌──────────┐ 事件 ┌──────────┐ API ┌──────────┐
│ 订单服务 │──────→│ 库存服务 │←─────│ 商品服务 │
│ Order BC │ │ Stock BC │ │Catalog BC│
│ │ │ │ │ │
│ 独立DB │ │ 独立DB │ │ 独立DB │
└──────────┘ └──────────┘ └──────────┘
│ 事件
▼
┌──────────┐ ┌──────────┐
│ 支付服务 │ │ 通知服务 │
│Payment BC│ │Notify BC │
└──────────┘ └──────────┘
✅ 按限界上下文拆分(推荐)
- 每个服务有独立的领域模型
- 每个服务有独立的数据库
- 服务边界 = 上下文边界 = 团队边界
❌ 按技术层拆分(不推荐)
- 用户服务、数据库服务、消息服务
- 一个业务变更需要改多个服务
// 单体中的模块边界 → 未来的微服务边界
// module: order(未来的订单服务)
package com.shop.order;
public class OrderService { }
public interface OrderRepository { } // 仓储接口
public class OrderPlacedEvent { } // 领域事件
// module: inventory(未来的库存服务)
package com.shop.inventory;
public class InventoryService { }
public interface StockRepository { }
// 模块间通过接口通信,而非直接调用
// 迁移为微服务时,接口变为 API 调用
// 订单服务调用库存服务
public class InventoryClient implements InventoryPort {
private final RestTemplate rest;
@Override
public boolean checkStock(String sku, int quantity) {
StockResponse response = rest.getForObject(
"http://inventory-service/api/stock/{sku}", StockResponse.class, sku);
return response.getAvailable() >= quantity;
}
}
# 订单服务发布事件
class OrderService:
def place_order(self, order):
order.place()
self.repo.save(order)
self.message_broker.publish("order.placed", {
"order_id": order.id,
"items": [{"sku": i.sku, "qty": i.qty} for i in order.items]
})
# 库存服务订阅事件
class InventoryEventHandler:
def on_order_placed(self, event):
for item in event["items"]:
self.stock_service.reserve(item["sku"], item["qty"])
| 策略 | 说明 | 适用场景 |
|---|---|---|
| 事件驱动 | 发布事件,订阅方最终一致 | 大多数场景 |
| Saga 模式 | 编排/协同补偿事务 | 跨服务事务 |
| 同步调用 | API 直接调用 | 强一致性要求 |
□ 每个服务对应一个限界上下文
□ 每个服务有独立的数据库(Database per Service)
□ 服务间不共享数据库表
□ 服务间通过 API 或事件通信,不直接访问对方数据
□ 每个服务有自己的领域模型,不共享领域对象
□ 使用防腐层隔离外部服务的模型
□ 分布式事务用 Saga 模式处理
| 概念 | 关系 |
|---|---|
| 限界上下文 | 一个上下文 = 一个微服务 |
| 上下文映射 | 指导服务间的集成模式 |
| 领域事件 | 服务间异步通信的主要方式 |
| Saga模式 | 解决跨服务的分布式事务 |
| 六边形架构 | 每个微服务内部用六边形架构 |
核心:限界上下文指导服务拆分,领域事件驱动服务通信,每个服务独立数据库。
实践:先在单体中划清模块边界(限界上下文),再按需拆分为微服务。