领域服务(Domain Service)
领域服务是领域驱动设计中处理跨多个对象或聚合的业务逻辑的模式。
汽车生产案例
在汽车制造厂中,领域服务可以理解为:
- 车辆质检服务(涉及整车装配、零部件检测等多个聚合)
- 生产调度服务(协调生产线、工位、工人等资源)
- 物流配送服务(管理零部件从仓库到生产线的运输)
这些场景都需要协调多个领域对象来完成业务操作。
主要特点
- 无状态:不持有业务数据,只包含业务逻辑
- 跨聚合:协调多个聚合或领域对象
- 显式命名:服务名称直接反映业务概念
- 领域焦点:只包含核心领域逻辑
示例
java
// 车辆质检服务
class QualityInspectionService {
public void inspectCar(CarAssembly car, InspectionStandard standard) {
// 协调多个聚合进行质检
boolean bodyPassed = car.getBody().inspect(standard);
boolean enginePassed = car.getEngine().inspect(standard);
// 综合评估
if (!bodyPassed || !enginePassed) {
throw new InspectionFailedException();
}
// 记录质检结果
inspectionLog.recordInspection(car, standard, true);
}
}
// 生产调度服务
class ProductionSchedulingService {
public void scheduleProduction(CarModel model, int quantity,
ProductionLine line, WorkerTeam team) {
// 协调资源分配
line.allocateCapacity(quantity);
team.assignWorkers(model.getRequiredSkills());
// 触发生产计划
productionPlan.create(model, quantity, line, team);
}
}
使用场景
- 业务逻辑涉及多个聚合
- 操作不适合放在单个实体或值对象中
- 需要封装技术实现细节
- 需要协调外部服务调用
设计原则
- 单一职责:每个服务只处理一个明确的业务功能
- 显式命名:名称应直接反映业务概念
- 无副作用:避免隐藏的业务规则或副作用
- 依赖明确:明确声明所有依赖