基于DDD的企业团餐订餐平台微服务架构设计与实现(二)
基于DDD的企业团餐订餐平台微服务架构设计与实现(二)
三、领域模型设计与聚合根划分
1. 领域对象分类
在DDD中,我们主要关注以下几类对象:
- 聚合根(Aggregate Root):负责维护聚合内部一致性,是外部访问聚合的唯一入口。
- 实体(Entity):具有唯一标识的对象。
- 值对象(Value Object):无唯一标识,仅由属性决定其相等性。
- 领域服务(Domain Service):处理跨聚合或复杂业务逻辑。
- 仓储接口(Repository Interface):提供对聚合的持久化访问。
2. 各限界上下文聚合根设计
(1)UserContext
- 聚合根:
User
- 实体:
Enterprise
,Employee
,DeliveryPerson
- 值对象:
Address
,ContactInfo
// User 聚合根示例
@Data
@Entity
public class User {@Idprivate String id;private String username;private String password;private UserRole role;// ... existing code ...
}
(2)MenuContext
- 聚合根:
Restaurant
,Dish
- 实体:
Category
,DailySpecial
- 值对象:
Price
,NutritionInfo
// Dish 聚合根示例
@Data
@Entity
public class Dish {@Idprivate String id;private String name;private Price price;private boolean available;// ... existing code ...
}
(3)OrderContext
- 聚合根:
Order
- 实体:
OrderItem
- 值对象:
OrderStatus
,PaymentStatus
// Order 聚合根示例
@Data
@Entity
public class Order {@Idprivate String id;private String userId;private List<OrderItem> items;private OrderStatus status;// ... existing code ...
}
(4)PaymentContext
- 聚合根:
Payment
- 值对象:
Amount
,TransactionId
(5)DeliveryContext
- 聚合根:
Delivery
- 实体:
Rider
,Location
- 值对象:
DeliveryStatus
,ETA
四、核心业务流程梳理
1. 下单流程
- 用户选择菜品并提交订单请求。
- 订单服务调用菜单服务验证菜品可用性。
- 创建订单聚合,保存至数据库。
- 发送订单创建事件至消息队列。
// 下单示例代码
public class OrderService {public String createOrder(CreateOrderCommand command) {var dish = menuService.getDishById(command.getDishId());if (!dish.isAvailable()) throw new DishNotAvailableException();var order = new Order();order.setId(UUID.randomUUID().toString());order.setUserId(command.getUserId());order.setItems(command.getItems());order.setStatus(OrderStatus.CREATED);// ... existing code ...return order.getId();}
}
2. 支付流程
- 用户发起支付请求。
- 支付服务生成支付记录。
- 调用第三方支付接口完成支付。
- 更新支付状态并发送支付成功事件。
3. 配送流程
- 配送服务监听订单创建事件。
- 分配骑手并生成配送任务。
- 骑手接单后更新配送状态。
- 实时推送状态变更给用户。
五、关键技术点分析
1. 微服务通信方式
- REST API:用于同步通信,适用于实时性强的场景。
- Feign Client:Spring Cloud 提供的声明式 REST 客户端。
- gRPC:高性能远程过程调用,适用于服务间高频通信。
- 消息队列(Kafka/RabbitMQ):用于异步解耦,如订单创建后触发库存扣减。
2. 数据一致性方案
- 本地事务:保证单个聚合内的数据一致性。
- 最终一致性:通过事件驱动和补偿机制处理跨服务操作。
- Saga 模式:用于长周期业务流程,如退款流程中的多服务协调。
3. 安全与权限控制
- JWT + OAuth2:用于用户认证与授权。
- Spring Security:集成安全框架,保护 REST 接口。
- Shiro:用于企业级权限管理,支持RBAC模型。
4. 缓存策略
- Redis + Spring Cache:缓存热点数据如热门菜品、用户信息。
- Caffeine:本地缓存,减少远程调用次数。
5. 日志与监控
- Logback + Log4j2:结构化日志输出。
- Prometheus + Grafana:实时监控系统运行状态。
- Zipkin:分布式链路追踪,定位服务调用瓶颈。
六、总结
本系列文章从业务分析出发,结合DDD设计理念,详细介绍了如何使用Java与Spring Boot构建企业级团餐订餐平台的微服务架构。希望本文能帮助你更好地理解DDD在实际项目中的应用,并能在自己的项目中落地实践。