DDD(领域驱动设计)示例目录结构
- interfaces // 用户接口层 - facade // 提供较粗粒度的调用接口,将用户请求委托给一个或多个应用服务进行处理 - rest // REST API - grpc // gRPC API - mq // 事件订阅 注1:统一返回Result 注2:应该捕捉所有异常 - application // 应用层 - dto // 存放 dto 数据传输对象 - request - response - assembler // 实现 DTO 与领域对象之间的相互转换和数据交换 - event // 存放事件相关代码,为了事件统一管理,将所有事件发布和订阅统一放到应用层,核心业务逻辑放到领域层 - publish // 事件发布 - service //对领域服务或外部应用服务进行封装、编排和组合,对外提供粗粒度服务 - command // 操作相关,必须调用领域层 - query // 只放查询相关,可以直接调用持久层 // 注1:出参必须为 DTO // 注2:入参为 Command 或 Query,唯一例外是单ID查询的场景 // 注3:Command 和 Query 有语义作用,避免复用 // 注4:实现入参校验,减少非业务代码混杂业务代码中 - domain // 领域层 - aggregate // 聚合目录,按业务名称命名,如权限聚合 - entity //领域对象 - factory // 从其他服务返回结果构建领域对象??? - valueobject - event // 存放事件实体和相关的业务逻辑代码 - service // 存放领域服务代码 - repository // 仓储,存放所有查询和持久化领域对象的代码,通常包括仓储接口和实现,仓储实现一般放在基础层,也可以直接放一起 - infrastructure // 基础层 - config // 存放配置相关代码 - client // 存放跨服务接口 - common // 存放消息、数据库、缓存、文件、总线、网关、公用的常量、枚举等 - enums // 存放枚举 - cache // 缓存相关服务 - mq // mq相关配置 - db // 数据库相关 - mapper // 存放 mybatis dao 实现 - repositories // 仓储实现 - po // 持久化对象 - converter // 用于封装底层,实现PO与DO一对多或多对多转换 - perisistence // 存放 RepositoryImpl,调用 mapper - ...... - util // 存放平台、开发框架、第三方类库、通用算法等基础代码 - resources // 配置文件
下一篇:
eclipse如何建立java项目