# idea-ddd-meta **Repository Path**: ynding/idea-ddd-meta ## Basic Information - **Project Name**: idea-ddd-meta - **Description**: DDD + SOFA框架 + CQRS + OLAP; Lingma IDE - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 1 - **Created**: 2022-04-26 - **Last Updated**: 2026-05-20 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # README ### 架构图 * 统一使用sofaboot的sofa分层方式,SOFA 分层是沿袭自蚂蚁 SOFA 工程的传统分层,蚂蚁传统 SOFA 应用通常基于模块化形式进行开发,解决了模块化开发下各模块相互影响的问题。 ![img_1.png](img_1.png) +app name * |—— app (应用目录) * |———— common (基础结构层) * |—————— common-util (公共常量,枚举,异常,日志,Log以及工具类等) * |—————— common-dal (ZDAL配置,SqlMap,DO,仓储实现) * |—————— common-service-facade (对外暴露的API,DTO,Request,Result等) * |—————— common-service-integration (调用外部服务的Wrapper或者Client等) * |———— core (核心/原子服务层) * |—————— core-model (领域模型,领域模型的仓储接口,支持校验,追踪,环境上下文等) * |—————— core-service (核心/原子服务) * |———— biz (业务逻辑层) * |—————— biz-shared (业务逻辑,入参xxxReq,返回WelfareResult包裹DTO) * |—————— biz-service (对外暴露的API实现类,入参xxxReq,返回DTO) * |———— test (测试层,单元测试的基类,Test Case和Starter) * |—— conf (SOFA 相关配置存放目录,包括sofa, log4j等配置) * |—— pom.xml (总POM文件) 说明: * [结构说明参考](https://blog.csdn.net/qq_34376868/article/details/123089173) * core-model模块定义了repository接口,common-dal 依赖 core-model模块,并实现了仓储接口。 * 添加了领域事件和事务管理(详见 [biz/biz-shared/DOMAIN_EVENT_GUIDE.md](biz/biz-shared/DOMAIN_EVENT_GUIDE.md)) * 优化聚合根的不可变性设计:不使用@Data 破坏领域类的封装性 * 另一种可能:core-model层可以完全封闭,只和core-service层进行交互;转换器类以及repository的实现都放在biz-shared层。 * 上图的箭头方向画反了,common-dal、common-service-facade 应该指向core-model;common-service-integration只依赖于外部第三方包;core-model 不依赖其他模块. * 读写分离优化(CQRS),写操作必须经过领域模型来保证业务一致性;读操作不强制经过领域模型,优先使用专为查询优化的模型(即使绕过聚合),但也不禁止在简单查询中使用领域仓储。即dal实现中写只有一套走领域,而读有两套,一套简单查询走领域,另一套复杂查询直接走DB。读有原则即不影响领域纯度(引入DTO等破坏聚合根封装性的行为)。 * 事务管理优化:事务边界统一在 Biz 层控制,Core Service 层不包含事务注解(详见 [TRANSACTION_OPTIMIZATION.md](biz/biz-shared/TRANSACTION_OPTIMIZATION.md)) ![ddd_cqrs.png](core/ddd_cqrs.png) ### CQRS 读写分离,大数据的开始。 ┌─────────────────────────────────────────┐ │ Client / API │ └─────────────────┬───────────────────────┘ │ ┌─────────────────┴───────────────────────┐ │ │ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ │ Command │ │ Query │ │ (写请求) │ │ (读请求) │ └────────┬─────────┘ └────────┬─────────┘ │ │ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ │ Application │ │ Application │ │ CommandService │ │ QueryService │ └────────┬─────────┘ └────────┬─────────┘ │ │ │ 调用领域 │ 不经过领域 ▼ │ ┌──────────────────┐ │ │ Domain Model │ │ │ - Aggregate │ │ │ - Entity │ │ │ - Value Object │ │ │ - Domain Event │ │ └────────┬─────────┘ │ │ │ │ Repository.save() │ ▼ ▼ ┌──────────────────┐ ┌──────────────────┐ │ Write DB │◄──────同步/异步─────│ Read DB / │ │ (事务/强一致) │ (CDC/事件) │ View / 缓存 │ └──────────────────┘ └──────────────────┘ ▲ │ │ │ └───────────── 查询走专用模型 ───────────┘ ### OLAP-Drios(BitMap, BloomFilter);批流一体、湖仓一体; ![DDD_CQRS_OLAP.png](DDD_CQRS_OLAP.png)