# ddd-frame **Repository Path**: yj20200601/ddd-frame ## Basic Information - **Project Name**: ddd-frame - **Description**: No description available - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2023-11-09 - **Last Updated**: 2025-03-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 项目结构介绍 ## 项目依赖关系图 ![img.png](image/releation.png) ## ddd-frame-common (通用信息封装模块) ​ common模块主要用于对统一响应封装,统一枚举封装,统一异常封装等等信息. ## ddd-frame-api (对外暴露接口) api模块是dubbo接口,该模块只依赖`ddd-frame-common`模块. ## ddd-frame-adapter(对外提供restful接口) 接口服务位于用户接口层,用于处理用户发送的Restful请求和解析用户输入的配置文件等,并将信息传递给应用层 ## ddd-frame-application(业务编排) 应用服务位于应用层。用来表述应用和用户行为,负责服务的组合、编排和转发,负责处理业务用例的执行顺序以及结果的拼装。 1. 应用层的服务包括应用服务和领域事件相关服务。 2. 应用服务可对微服务内的领域服务以及微服务外的应用服务进行组合和编排,或者对基础层如文件、缓存等数据直接操作形成应用服务,对外提供粗粒度的服务。 3. 领域事件服务包括两类:领域事件的发布和订阅。通过事件总线和消息队列实现异步数据传输,实现微服务之间的解耦。 ![img.png](image/application.png) - api: 用于实现 `ddd-frame-api`模块接口 - biz: 用户实现`ddd-frame-adapter`模块接口 - dto: 用于定义应用层dto,调用第三方时用到的dto - assembler: 接口层与domain层数据进行转换后 - listener: MQ消息监听 - repository: 仓储, application层查询数据而不做任何业务逻辑处理时直接定义仓储接口,基础设施层实现该接口. - scheduler: 定时任务定义 ## ddd-frame-domain(业务逻辑处理) 领域服务位于领域层,为完成领域中跨实体或值对象的操作转换而封装的服务,领域服务以与实体和值对象相同的方式参与实施过程。 1. 领域服务对同一个实体的一个或多个方法进行组合和封装,或对多个不同实体的操作进行组合或编排,对外暴露成领域服务。领域服务封装了核心的业务逻辑。实体自身的行为在实体类内部实现,向上封装成领域服务暴露。 2. 为隐藏领域层的业务逻辑实现,所有领域方法和服务等均须通过领域服务对外暴露。 3. 为实现微服务内聚合之间的解耦,原则上禁止跨聚合的领域服务调用和跨聚合的数据相互关。 ![image-20231114112442361](image/image-20231114112442361.png) - model - entity : 实体 - valueObj : 值对象 - 聚合根 - repository : 仓储 - gateway: 网关,用于调用第三方接口(dubbo, http) - persistence: 持久化层,用于调用内部jdbc顶层接口 - service: 聚合服务 - impl: 聚合服务实现 - event: 事件 ## ddd-frame-infrastructure(基础设施层) 基础服务位于基础层。为各层提供资源服务(如数据库、缓存等),实现各层的解耦,降低外部资源变化对业务逻辑的影响。 基础服务主要为仓储服务,通过依赖反转的方式为各层提供基础资源服务,领域服务和应用服务调用仓储服务接口,利用仓储实现持久化数据对象或直接访问基础资源。 ![image-20231114112816115](image/image-20231114112816115.png) - config ​ 主要存放配置相关代码。 - Util 主要存放平台、开发框架、消息、数据库、缓存、文件、总线、网关、第三方类库、通用算法等基础代码,可为不同的资源类别建立不同的子目录.