DDD代码结构

层级

职责

示例

备注

interfaces层(接入层)
  • 接入层指的是服务端用于适配端侧的部分,而非端侧本身
  • 关心视图和对外的服务,Jsf、Restful、事件监听、任务调度等
  • 可以对应到分布式系统中的BFF等概念
  • 只产生接入异常,例如数据校验,对应 HTTP 状态码 400、403、415 等

  • 一个应用可以有多个接入层

  • 接入层做和业务规则无关的 bean validation 验证
  • 入参一般定义为xxxRequest/xxxCmd,包含签名等权限信息
  • 接入层完成Request/Cmd对象到application层DTO(cmd、queryModel)的转换

400  错误请求 — 请求中有语法问题,或不能满足请求。

403 (禁止) 服务器拒绝请求

415  介质类型不受支持 — 服务器拒绝服务请求,因为不支持请求实体的格式。

application应用层
  • 关心处理完一个完整的业务,业务可以分为业务用例服务和系统用例服务

  • 该层只负责业务编排,对象转换,实际业务逻辑由领域层完成

  • 不关心请求从何处来,但是关心谁来、做什么、有没有权限做

  • 集成不同的领域服务解决问题

  • 跨聚合的事务和分布式事务的处理放在这里
  • 方法级别的功能权限控制放到这层

  • 只产应用异常,对应 HTTP 状态码401、405

  • 调用assember、工厂类或实体builder方法完成领域对象的创建,即完成DTO—>DO的转换;

  • 准单体系统下按照上下文分包,上下文之间调用必须rpc调用 ,目的就是解耦

业务编排的粒度?

权限验证—>对象创建/获取—>领域服务(多个)—>仓储保存—>外部通知(可以为jsf或事件)?

401  未授权 — 未授权客户机访问数据。  

405 - 资源被禁止 

domain领域层
  • 不关心场景,关心模型完整性和业务规则

  • 不关心谁来,不关心场景完整的业务,关心当前上下文的业务完整

  • 强一致性事务放到这层,聚合的事务是 “理所当然的”

  • 领域层做业务逻辑处理、业务规则验证,领域层均为内存级对象处理

  • 产生业务规则异常,例如用户退款条件不满足,对应状态码 412等

  • 数据权限放到这层(比如只允许删除自己创建的商品),因为数据权限涉及业务规则

  • 上下文中分聚合,聚合根要足够小,只允许聚合根拥有对应的 domain service

  • 根据业务情况,参考反范式理论,跨上下文使用值对象做必要的数据冗余

412 错误 – 先决条件失败

infrastructure基础设施层
  • 关心存储、通知、第三方系统等外部设施(防腐层隔离)

  • 基础设施异常,应丢出内部异常,对应状态码 500

  • 依赖倒置,通过实现领域层的gateway、repository接口定义实现应用层和领域层模型独立、解耦
  • 基础实施层完成领域对象到持久化对象的转换DO—>PO,通过gatewayimpl防腐层完成外部对象到领域对象的转换
  • 一个聚合对应一个仓储
500 (服务器内部错误) 服务器遇到错误,无法完成请求。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值