# ddd **Repository Path**: gilbert-bright/ddd ## Basic Information - **Project Name**: ddd - **Description**: DDD之代码模型 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2024-04-03 - **Last Updated**: 2024-04-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## ddd ### 介绍 DDD之代码模型 #### 软件架构 按照DDD的四层分层架构 ### 代码模型 ![image](https://gitee.com/haoshijin/ddd/raw/master/DDD代码模型.png) #### 用户接口层(apis) 用户接口层是前端应用和微服务之间服务访问和数据交换的桥梁。它处理前端发送的 Restful 请求和解析用户输入的配置文件等,将数据传递给应用层。 获取应用服务的数据后,进行数据组装,向前端提供数据服务。主要服务形态是 Facade 服务。 完成服务定向,DO 与 DTO 数据的转换和组装,实现前端与应用层数据的转换和交换。 如果存在多个限界上下文,请增加一层包名 Facade(API接口) BusinessFacade DTO(数据传输对象) BusinessDTO Assembler(对象转换器) VO(视图对象) BusinessVO base(基础封装) valid(参数校验):API请求参数的统一处理,校验、排序和类型转换等 security(统一鉴权服务):统一安全防护和身份鉴权等 #### 应用层(applications) 应用层用来表述应用和用户行为,负责服务的组合、编排和转发,负责处理业务用例的执行顺序以及结果的拼装,负责不同聚合之间的服务和数据协调,负责微服务之间的事件发布和订阅。 除了完成服务的组合和编排外,应用服务内还可以完成安全认证、权限校验、初步的数据校验和分布式事务控制等功能。 如果存在多个限界上下文,请增加一层包名 Service(应用服务) AppService:应用服务类 Event(事件) XxxEventPublish(事件发布实现) XxxEventListener(事件监听器) init(初始化配置) #### 领域层(domains) 领域层实现核心业务逻辑,负责表达领域模型业务概念、业务状态和业务规则。主要的服务形态有实体方法和领域服务。 DDD 提倡富领域模型,尽量将业务逻辑归属到实体对象上,实在无法归属的部分则设计成领域服务。领域服务会对多个实体或实体方法进行组装和编排,实现跨多个实体的复杂核心业务逻辑。 如果存在多个限界上下文,请增加一层包名 Xxx(聚合) XxxAR(聚合根) entity(实体和值对象) DO(领域对象) service(领域服务) #### 抽象接口层(interfaces) 采用依赖倒置的方式,分别被应用层、领域层和基础设施层依赖,负责对特定服务的接口抽象,方便其他层进行调用。 缓存服务(cache):缓存服务的抽象接口 消息服务(notice):消息服务的抽象接口 event AppXxxEnvent(应用事件) XxxEnvent(领域事件) publish EventPublish:事件发布器 持久化服务(persistence):持久化接口 mapper repository #### 基础设置层(infrastructure) 主要存放基础资源服务相关的代码,为其它各层提供的通用技术能力、三方软件包、数据库服务、配置和基础资源服务的代码都会放在这一层目录里。 持久化接口实现(persistenceImpl) mysql mongodb 缓存服务实现(cacheImpl) 消息服务实现(noticeImpl) #### 全局共用层(global) 公共配置(config):公共的初始化配置等 常量集(constants):全局共用的常量集 统一异常处理(exception):最终异常的统一捕获和处理等 文件服务(file) 统一日志服务(log):切面日志等统一日志封装 工具集(utils):全局共用的实用工具集 统一异常处理(exception) 统一日志服务(log) 工具集(utils) #### 使用说明 1. 其实代码模型本就没有一个标准的结构,全凭各自的经验总结而得。 2. 关于DDD是否要在微服务中落地,也不一定,如果是一个小型的项目,那么一个工程就包含了所有,我们只需要按照不同的限界上下文以包名为边界即可。当系统变大需要拆分时按照限界上下文进行拆分即可。 3. DDD只是一种软件设计和开发的指导思想,主要它帮我们理清了业务,划清了边界,并且以分层的代码模型规定了代码的依赖关系,使之更加解耦了。 #### 参与贡献 1. Fork 本仓库 2. 新建 Feat_xxx 分支 3. 提交代码 4. 新建 Pull Request #### 码云特技 1. 使用 Readme\_XXX.md 来支持不同的语言,例如 Readme\_en.md, Readme\_zh.md 2. 码云官方博客 [blog.gitee.com](https://blog.gitee.com) 3. 你可以 [https://gitee.com/explore](https://gitee.com/explore) 这个地址来了解码云上的优秀开源项目 4. [GVP](https://gitee.com/gvp) 全称是码云最有价值开源项目,是码云综合评定出的优秀开源项目 5. 码云官方提供的使用手册 [https://gitee.com/help](https://gitee.com/help) 6. 码云封面人物是一档用来展示码云会员风采的栏目 [https://gitee.com/gitee-stars/](https://gitee.com/gitee-stars/)