现代化的领域驱动设计的货物跟踪系统


DDDSample: 现代领域驱动设计的货物跟踪系统

项目概述

DDDSample 是一个基于现代领域驱动设计(DDD)理念开发的货物跟踪系统,旨在展示如何运用 DDD 原则构建高效、可维护和可扩展的企业级应用。该系统采用了分层架构、事件驱动架构、CQRS 等设计模式,并集成了 Spring Boot、JPA、JMS 等技术,为开发高质量的软件系统提供了良好的范例。

技术栈

  • Spring Boot 3:作为基础框架,利用其自动配置和依赖注入功能,简化项目开发和部署。
  • JPA (Spring Data JPA):用于数据库操作,提供简洁的方式访问和管理数据。
  • JMS (Spring ActiveMQ):实现消息队列,支持异步通信和事件驱动架构。

功能特性

策略设计模式

为处理报告提供了策略设计模式,支持线程池(ThreadPool)、消息队列(MessageQueue)和直接处理(Directly)三种方式。通过配置   CargoTrackerApplicationProperties  中的   HandlingReportProcessStrategy  可以灵活选择处理策略,提高了系统的灵活性和可配置性。

 

java          
@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;
}
}

BDD 测试

在应用层采用行为驱动开发(BDD)测试,提高了测试的可读性和可维护性。通过编写测试用例来验证系统的行为是否符合预期。

无删除设计

各层采用无删除设计,例如可以安全地删除接口层的文件夹,而不会影响系统的其他部分。

领域层分离

将领域层分离为单独的 JAR 文件,避免意外使用领域层外的类,保护领域模型的完整性。

CQRS 分离

利用命令查询职责分离(CQRS)模式,将写操作和读操作分离处理,提高系统的性能和可扩展性。

架构设计

分层架构与模块化

采用清晰的分层架构,将不同职责的代码分离,如领域层、应用层、接口层等。领域层专注于核心业务逻辑,应用层协调业务流程,接口层负责对外提供服务。这种分层设计使得代码结构清晰,易于维护和扩展。

事件驱动架构

使用事件来解耦不同模块之间的依赖,当货物状态发生变化时,发布相应的事件,如   CargoCreatedEventCargoRoutedEvent  等。通过消息队列和事件监听器,实现了异步处理和系统的可扩展性。

领域建模

清晰的领域模型

定义了丰富的领域实体和值对象,如   CargoItineraryLegLocation  等,准确地反映了业务领域的概念和关系。

值对象和实体的区分

明确区分了值对象和实体,如   TrackingId  是值对象,用于唯一标识货物; Cargo  是实体,具有唯一标识和生命周期。

相關推薦

2024-08-20

MoonBit beta 预览版比大部分主流语言更早推出现代化泛型、精准错误处理和高效迭代器等重要特性,在云计算、边缘计算、人工智能和教育等领域快速实现落地应用。Beta 预览版标志着 MoonBit 生态进入全新阶段,为用户提供更稳定

2023-09-12

CQRS 架构微服务开发框架        领域驱动  |  事件驱动  |  测试驱动  |  声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 更

2023-06-09

DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件源 更新内容 🎉 🎉 🎉 消息总

2025-03-24

Wisdom SSH,专为系统管理员与开发人员量身定制的现代化 SSH 终端工具,巧妙融入智能 AI 助手。它不仅集合了传统 SSH 客户端的所有功能,更借助 AI 驱动的运维助力,彻底颠覆服务器管理模式,引领运维工作迈向智能、高效的崭

2023-07-05

CQRS 架构微服务开发框架        领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件源 更新内容 🎉 🎉 🎉 提升无

2023-06-12

DDD、EventSourcing 的现代响应式 CQRS 架构微服务开发框架 领域驱动 | 事件驱动 | 测试驱动 | 声明式设计 | 响应式编程 | 命令查询职责分离 | 事件源 更新内容 🎉 🎉 🎉 支持&nb

2023-08-06

CQRS 架构微服务开发框架        领域驱动  |  事件驱动  |  测试驱动  |  声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源 更

2022-08-21

EasyDomain v1.4 已经发布,领域驱动开发实用库 此版本更新内容包括: 经过复杂项目的锤炼,DDD领域驱动设计库v1.4版本增强了EntityBase和EntityRule的能力。并进一步强化了领域模型在系统设计中的核心地位。 EntityBase实体基类增强

2024-04-15

建设铁路、公路、桥梁、机场、车站等设施,运输旅客、货物和各种自然资源的模拟经营游戏。游戏最终目标是通过运输赚取最大利润,经过残酷的竞争,最终打败对手,成为运输大亨。 OpenTTD 14.0 现已发布,具体更新内容包括

2024-09-27

技术领先竞争力。 简介 AimRT 是一个面向现代机器人领域的运行时开发框架。 它基于 Modern C++ 开发,轻量且易于部署,在资源管控、异步编程、部署配置等方面具有更现代的设计。 AimRT 致力于整合机器人端侧、边缘端、云

2025-03-27

术应用新范式,加速企业数字化转型进程。 AI 搜索 是现代化生活与企业发展的技术基石 通过创新的 AI 搜索技术,Elastic 持续为消费级与企业级市场提供创新解决方案。在消费领域,其技术矩阵已深度融入高频生活场景:电商平

2023-10-22

应式 CQRS 架构微服务开发框架       领域驱动  |  事件驱动  |  测试驱动  |  声明式设计 | 响应式编程 | 命令查询职责分离 | 事件溯源

2024-08-09

相关模块的 javadoc :业务框架、压测与模拟客户端请求、领域事件、Room [core] #346 业务框架 InOutManager 提供扩展点 [core] #344 登录时,如果 FlowContext 存在 userId 就不请求游戏对外服 [broker] fixed #342 非集群环境下,Broker 断开重启

2024-07-25

新登录后,也会使用相同的线程来消费业务,并推荐使用领域事件来解决同一房间或业务内多个玩家的并发问题。框架在线程的扩展性上提供了友好的支持,开发者可以很容易的编写出无锁并发代码,这得益于 ioGame 独有的线程