CargoTrackerApplicationProperties
HandlingReportProcessStrategy
@Data @ConfigurationProperties(prefix = "cargotracker.application") public class CargoTrackerApplicationProperties { private final HandlingReport handingReport = new HandlingReport(); public enum HandlingReportProcessStrategy { MESSAGE, THREAD, DIRECT } @Data public static class HandlingReport { private HandlingReportProcessStrategy processStrategy = HandlingReportProcessStrategy.DIRECT; } }
CargoCreatedEvent
CargoRoutedEvent
Cargo
Itinerary
Leg
Location
TrackingId
评论删除后,数据将无法恢复
现代化的领域驱动设计的货物跟踪系统
DDDSample: 现代领域驱动设计的货物跟踪系统
项目概述
技术栈
功能特性
策略设计模式
CargoTrackerApplicationProperties中的HandlingReportProcessStrategy可以灵活选择处理策略,提高了系统的灵活性和可配置性。BDD 测试
无删除设计
领域层分离
CQRS 分离
架构设计
分层架构与模块化
事件驱动架构
CargoCreatedEvent、CargoRoutedEvent等。通过消息队列和事件监听器,实现了异步处理和系统的可扩展性。领域建模
清晰的领域模型
Cargo、Itinerary、Leg、Location等,准确地反映了业务领域的概念和关系。值对象和实体的区分
TrackingId是值对象,用于唯一标识货物;Cargo是实体,具有唯一标识和生命周期。