DDD领域驱动设计实战-分层架构及代码目录结构,2021年腾讯Java高级面试题及答案

本文详细介绍了DDD领域的分层架构,包括facade、dto、assembler,强调了应用层的特点和代码目录结构。文章讨论了事件的发布和订阅,以及服务的组合和编排。此外,还涵盖了领域层的核心业务逻辑,强调了领域模型的业务能力和微服务架构的演进。最后,提到了从MVC到DDD的演进过程和注意事项。
摘要由CSDN通过智能技术生成

该层指的是服务端用于适配端侧的部分,而非端侧本身。因为该层本就依赖应用层,无人使用接口在这里做依赖倒置,所有又被称作主动适配。

1.1 细分结构


  • assembler、dto 和 façade

facade

提供较粗粒度的调用接口,将用户请求委派给一个或多个应用服务进行处理。比如调用应用层创建用户的方法。

dto

数据传输的载体,内部不存在任何业务逻辑,可以通过DTO把内部的领域对象与外界隔离。

比如接收请求传入的数据CustomerDTO。

不同的对象在不同的层转换。用户接口层DTO和DO转换,应用层主要是DO,调外部微服务的服务的时候应用层有dto和do的转换。领域层与基础层之间,在基础层有DO和PO的转换。

在接口层定义DTO对象。数据可能来源于多个DO对象。

assembler

实现DTO与DO间的相互转换和数据交换。

一般assembler与dto一同出现。比如创建用户时,将CustomerDTO转换为CustomerEntity。你可以在用户接口层创建DTO类和assembler类。在assembler类里完成映射。

2.2 应用层


特点

  • 关心处理完一个完整的业务

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

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

即复制安全认证、权限校验

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

应用层位于领域层之上,因为领域层包含多个聚合,所以它可协调多个聚合服务和领域对象完成服务编排和组合,协作完成业务。

  • 最终一致性(最终一致性对业务有侵入)事务放到这层

  • 对应到分布式系统中的中台等概念

  • 方法级别的功能权限控制放到这层

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

  • 准单体系统下,按照应用划分模块

主要包含应用服务,理论上不应有业务规则或逻辑,而主要是面向用例和流程相关的操作。

  • 应用层也是微服务间的交互通道,它可调用其它微服务,完成微服务间的服务组合和编排

开发设计时,不要将本该放在领域层的业务逻辑放到应用层。庞大的应用层会使领域模型失焦,时间一长,微服务就会退化为MVC

应用服务是在应用层,负责

  • 服务的组合、编排、转发、转换和传递,处理业务用例的执行顺序以及结果的拼装,以粗粒度服务通过API网关发布到前端

  • 发送或订阅领域事件

应用层代码目录结构

存放应用层服务组合和编排相关的代码。

应用服务向下基于

  • 微服务内的领域服务,或

  • 外部微服务的应用服务

完成服务的编排和组合

向上为用户接口层提供各种应用数据展现支持服务。

应用服务和事件等代码会放在这层目录。

Event(事件)

主要存放事件相关代码。包括两子目录:

publish

主要存放事件发布相关代码。比如发布用户创建事件给其它微服务。

subscribe

主要存放事件订阅相关代码(事件处理相关的核心业务逻辑在领域层实现)。

虽然应用层和领域层都可进行事件的发布和处理,但为实现事件的统一管理,推荐将微服务内所有事件的发布和订阅处理都

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值