蚂蚁面试:DDD外部接口调用,应该放在哪一层?

news2025/2/22 1:34:44

尼恩说在前面:

在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如字节、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题:

DDD 的外部接口调用,应该放在哪一层?

DDD架构,如何落地?

谈谈你的DDD落地经验?

谈谈你对DDD的理解?

如何保证RPC代码不会腐烂,升级能力强?

微服务如何拆分?

微服务爆炸,如何解决?

你们的项目,DDD是怎么落地实操的?

所以,这里尼恩给大家做一下系统化、体系化的梳理,使得大家可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”

也一并把这个题目以及参考答案,收入咱们的 《尼恩Java面试宝典PDF》V155版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。

除了本文,尼恩输出了一个 《DDD学习圣经》系列,帮助大家彻底掌握DDD。

同时,尼恩持续输出最新的《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请关注本公众号【技术自由圈】获取,后台回复:领电子书

问题1:DDD的外部接口调用,应该放在哪一层?(蚂蚁面试)

无论是RPC (如Feign),还是HTTPClient调用Rest API,具体的外部接口调用实现放在infrastructure 基础设施层。

在领域驱动设计(DDD)中,基础设施层负责处理与外部资源的交互,包括数据库、文件系统、消息队列、外部服务等。

来看看 cola的 DDD 架构, 具体如下图

在这里插入图片描述

COLA(Clean Object-oriented Architecture)框架是一种基于领域驱动设计(DDD)和面向对象设计原则的架构风格,旨在帮助开发人员构建清晰、可维护和可扩展的应用程序。

1)适配层(AdapterLayer):负责对前端展示(web,wireless,wap)的路由和适配,对于传统B/S系统而言,adapter就相当于MVC中的controller;

2)应用层(ApplicationLayer):主要负责获取输入,组装上下文,参数校验,调用领域层做业务处理,如果需要的话,发送消息通知等。层次是开放的,应用层也可以绕过领域层,直接访问基础实施层;

3)领域层(Domain Layer):主要是封装了核心业务逻辑,并通过领域服务(Domain Service)和领域对象(DomainEntity)的方法对App层提供业务实体和业务逻辑计算。领域是应用的核心,不依赖任何其他层次;

4)基础实施层(InfrastructureLayer):主要负责技术细节问题的处理,比如数据库的CRUD、搜索引擎、文件系统、分布式服务的RPC等。此外,领域防腐的重任也落在这里,外部依赖需要通过gateway的转义处理或者代理处理,才能被上面的App层和Domain层使用。

gateway 代理的架构,也非常类似与适配器的架构。 gateway 代理架构分为两个部分:

  • gateway 接口处于 领域层,

  • gateway 的实现处于 基础实施层(InfrastructureLayer)。

具体如下:

在这里插入图片描述

在COLA框架中,Gateway通常指的领域层的网关,是一种隔离在应用程序领域层内部和系统外部之间进行通信和交互的接口或者组件。COLA框架中的Gateway通常被用于以下几个方面:

  1. 数据交互:Gateway可以用于在领域层和基础设施层之间进行数据交互。例如,领域层的服务可以通过Gateway将数据传递给基础设施层进行持久化,或者基础设施层可以通过Gateway将数据加载到领域层中进行处理。
  2. 外部接口调用:Gateway也可以用于与外部系统进行通信。例如,Gateway可以封装与外部服务的交互逻辑,使得领域层不直接依赖于外部服务的细节。
  3. 跨边界通信:在复杂的应用程序中,可能存在多个边界或子系统。Gateway可以用于在这些边界之间进行通信,帮助将系统拆分为更小的模块并保持模块之间的松耦合性。

总之,COLA框架中的Gateway扮演着连接不同层和组件之间的桥梁角色,有助于实现应用程序的模块化、可维护和可扩展性。

问题2:什么是聚合?

“聚合”即“高内聚,低耦合”中的“内聚”之意;

聚合是业务和逻辑紧密关联的实体和值对象组合而成,聚合是数据修改和持久化的基本单元,一个聚合对应一个数据的持久化;

聚合在DDD分层架构中属于领域层,领域层包含了多个聚合,共同实现核心业务逻辑,聚合内的实体以充血模型实现个体业务能力,以及业务逻辑的高内聚; 跨多个实体的业务逻辑通过领域服务来实现,跨多个聚合的业务逻辑通过应用服务来实现;

首先我们来看下聚合模式的定义:

将实体和值对象划分为聚合并围绕着聚合定义边界。

选择一个实体作为每个聚合的根,并仅允许外部对象持有对聚合根的引用。作为一个整体来定义聚合的属性和不变量,并把其执行责任赋予聚合根或指定的框架机制。

一个聚合包含一个聚合根(aggregation root)和一些相关的其他领域对象。

问题3:什么是聚合根?

在《DDD学习圣经》中,我们讲到了“什么是聚合根”,这里再重复一下。

聚合根中的“聚合”即“高内聚,低耦合”中的“内聚”之意;

而“根”则是“根部”的意思,也即聚合根是一种统领式的存在。

事实上,并不存在一个教科书式的对聚合根的理论定义,你可以将聚合根理解为一个系统中最重要最显著的那些名词,这些名词是其所在的软件系统之所以存在的原因。

为了给你一个直观的理解,以下是几个聚合根的例子:

  • 在一个电商系统中,一个订单(Order)对象表示一个聚合根
  • 在一个CRM系统中,一个客户(Customer)对象表示一个聚合根
  • 在一个银行系统中,一次交易(Transaction)对象表示一个聚合根

你可能会问,软件中的概念已经很多了,为什么还要搞出个聚合根的概念?

我们认为这里至少有2点原因:

  1. 聚合根遵循了软件中“高内聚,低耦合”的基本原则
  2. 聚合根体现了一种模块化的原则,模块化思想是被各个行业所证明的可以降低系统复杂度的一种思想。所谓的DDD是“软件核心复杂性应对之道”,也即这个意思,它将软件系统在人脑中所呈现地更加有序和简单,让人可以更好地理解和管控软件系统。

在实际项目中识别聚合根时,我们需要对业务有深入的了解,因为只有这样你才知道到底哪些业务逻辑是内聚在一起的。

这也是我们一直建议程序员和架构师们不要一味地埋头于技术而要多关注业务的原因。

事实上,如果让一个从来没有接触过DDD的人来建模,十有八九也能设计出上面的订单、客户和交易对象出来。

没错,DDD绝非什么颠覆式的发明,依然只是在前人基础上的一种进步而已,这种进步更多的体现在一些设计原则上,对此我们将在下文进行详细阐述。

问题4:聚合和MYSQL 表的对应关系是什么 ?

技术自由圈,明天发布此题答案

也可以参考 最新版 《尼恩Java面试宝典》 PDF

问题5:什么是领域驱动设计(DDD)?

技术自由圈,明天发布此题答案

也可以参考 最新版 《尼恩Java面试宝典》 PDF

问题6:DDD建模与微服务架构设计的关系?

技术自由圈,明天发布此题答案

也可以参考 最新版 《尼恩Java面试宝典》 PDF

问题7:微服务一定要DDD,为什么?TDD和DDD 有何关系?

具体答案,请参见此文: https://mp.weixin.qq.com/s/80Gza3-9pO8bYlSJoEDVWg

问题8:DDD架构,如何落地?

具体答案,请参见此文: https://mp.weixin.qq.com/s/_NAHYDIvmT7EbffXkIpqYw

问题9:DDD 领域层,该如何设计?

具体答案,请参见此文:https://mp.weixin.qq.com/s/njBl791vFCd94UplPJEFKw

问题10:微服务如何拆分?原则是什么?

具体答案,请参见此文: https://mp.weixin.qq.com/s/bExjRkVbDLTV2Wf9G6dzrg

问题11:给一个需求,请用DDD设计出来

具体答案,请参见此文: https://mp.weixin.qq.com/s/izzUXIpVmURq6hTCEN0ARQ

参考文献

尼恩特别编著 《DDD学习圣经》

《阿里DDD大佬:从0到1,带大家精通DDD》

《阿里大佬:DDD 落地两大步骤,以及Repository核心模式》

《阿里大佬:DDD 领域层,该如何设计?》

《极兔面试:微服务爆炸,如何解决?Uber 是怎么解决2200个微服务爆炸的?》

《阿里大佬:DDD中Interface层、Application层的设计规范》

《字节面试:请说一下DDD的流程,用电商系统为场景》

《DDD如何落地:去哪儿的DDD架构实操之路》

《DDD落地:从腾讯视频DDD重构之路,看DDD极大价值》

《DDD落地:从美团抽奖平台,看DDD在大厂如何落地?》

《美团面试:微服务如何拆分?原则是什么?》

《DDD神药:去哪儿结合DDD,实现架构大调优》

《DDD落地:从网易新闻APP重构,看DDD的巨大价值》

《DDD落地:从阿里单据系统,看DDD在大厂如何落地?》

《DDD落地:有赞的生产项目,DDD如何落地?》

《DDD落地:从携程订单系统重构,看DDD的巨大价值》

《DDD落地:京东的微服务生产项目,DDD如何落地?》

《DDD落地:从阿里商品域,看DDD在大厂如何落地?》

《240Wqps,美团用户中台, 如何使用DDD架构?》

《DDD落地:爱奇艺打赏服务,如何DDD架构?》

《大厂痴迷DDD:从高德portal重构,看DDD的巨大价值》

《高开面试:给一个需求,请用DDD设计出来》

《大厂痴迷DDD:从高德portal重构,看DDD的巨大价值》

说在最后:有问题找老架构取经

DDD 相关的面试题,是非常常见的面试题。也是核心面试题。

以上的内容,如果大家能对答如流,如数家珍,基本上 面试官会被你 震惊到、吸引到。

最终,让面试官爱到 “不能自已、口水直流”。offer, 也就来了。

在面试之前,建议大家系统化的刷一波 5000页《尼恩Java面试宝典》V174,在刷题过程中,如果有啥问题,大家可以来 找 40岁老架构师尼恩交流。

另外,如果没有面试机会,可以找尼恩来帮扶、领路。

  • 大龄男的最佳出路是 架构+ 管理
  • 大龄女的最佳出路是 DPM,

在这里插入图片描述

女程序员如何成为DPM,请参见:

DPM (双栖)陪跑,助力小白一步登天,升格 产品经理+研发经理

领跑模式,尼恩已经指导了大量的就业困难的小伙伴上岸。

前段时间,领跑一个40岁+就业困难小伙伴拿到了一个年薪100W的offer,小伙伴实现了 逆天改命

另外,尼恩也给一线企业提供 《DDD 的架构落地》企业内部培训,目前给不少企业做过内部的咨询和培训,效果非常好。

在这里插入图片描述

尼恩技术圣经系列PDF

  • 《NIO圣经:一次穿透NIO、Selector、Epoll底层原理》
  • 《Docker圣经:大白话说Docker底层原理,6W字实现Docker自由》
  • 《K8S学习圣经:大白话说K8S底层原理,14W字实现K8S自由》
  • 《SpringCloud Alibaba 学习圣经,10万字实现SpringCloud 自由》
  • 《大数据HBase学习圣经:一本书实现HBase学习自由》
  • 《大数据Flink学习圣经:一本书实现大数据Flink自由》
  • 《响应式圣经:10W字,实现Spring响应式编程自由》
  • 《Go学习圣经:Go语言实现高并发CRUD业务开发》

……完整版尼恩技术圣经PDF集群,请找尼恩领取

《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》PDF,请到下面公号【技术自由圈】取↓↓↓

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1659790.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java方法和数组

方法 Java中的方法就是c语言中的函数。 方法的定义 定义格式如下 修饰符 返回值 方法名([参数列表]){代码块[return 返回值;] } //方括号[]括起来代表可以没有,不是必须有的方法名采用小驼峰命名(就是有多个单词,第一个单词首字母小写其…

阅读送书抽奖?玩转抽奖游戏,js-tool-big-box工具库新上抽奖功能

先讨论一个问题,你做软件工作是为了什么?从高中选专业,就喜欢上了软件开发?还是当初毕业不知道干啥,不喜欢自己的专业,投入软件开发的怀抱?还是干着干着别的,突然觉得互联网行业真不…

前端技术交流群

欢迎来到前端筱园用户交流!这是一个专注于前端编程技术、学习资源和行业动态的讨论平台。在这里,你可以分享经验、提问、回答问题,与其他前端开发者一起学习和成长。 🌟亲爱的朋友们🌟 大家好!感谢你们一直…

《Tam》论文笔记(下)

3 Method 3.1. The Overview of Temporal Adaptive Module 正如我们在第1节中讨论的,视频数据通常表现出由相机运动和速度变化等因素引起的复杂时间动态。因此,我们的目标是通过引入具有视频特定内核的时间自适应模块 (TAM) 来解决这个问题&#xff0c…

一键自动化博客发布工具,用过的人都说好(infoq篇)

infoq的博客发布界面也是非常简洁的。首页就只有基本的标题,内容和封面图片,所以infoq的实现也相对比较简单。 一起来看看吧。 前提条件 前提条件当然是先下载 blog-auto-publishing-tools这个博客自动发布工具,地址如下:https://github.c…

营收如泡沫,利润如刀片,万辰集团万店梦想下的阴影

(作者注:本文建议配乐《泡沫》阅读!) 从“食用菌第一股”转型为“量贩零食第一股”的首个财年,万辰集团新业务发展迅猛。 财报显示,2023年公司量贩零食业务实现营业收入87.59亿元,同比增长1305…

微火全域运营平台的优缺点分别是什么?

随着全域运营赛道的兴起,微火全域运营平台在市场占有率持续走高,与之相关的各类问题也层出不穷。其中,微火全域运营平台是什么、微火全域运营平台的优缺点等与平台本身相关的问题长期位居话题榜前列。 所谓微火全域运营平台,就是由…

京东手势验证码-YOLO姿态识别+Bézier curve轨迹拟合

这次给老铁们带来的是京东手势验证码的识别。 目标网站:https://plogin.m.jd.com/mreg/index 验证码如下图: 当第一眼看到这个验证码的时候,就头大了,这玩意咋识别??? 静下心来细想后的一个方案&#xf…

使用apache和htaccess对目录访问设置密码保护配置教程

对目录设置密码保护配置说明 我们有时候访问某些网站的时候,要求输入用户名和密码才能访问。这是为了保护隐私,只让经过许可的人访问。 在本教程中主要介绍两种方法,一种是通过apache httpd.conf配置文件对管理后台目录设置密码保护&#xff…

ESP32引脚入门指南(四):从理论到实践(PWM)

引言 ESP32 作为物联网领域的明星微控制器,除了强大的Wi-Fi和蓝牙功能,还内置了丰富的外设资源,其中就包括高级的PWM(脉冲宽度调制)功能。本文将深入探讨ESP32的PWM引脚,解析其工作原理,并通过…

分布式与一致性协议之Quorum NWR算法

Quorum NWR算法 概述 不知道你在工作中有没有遇到过这样的事情:你开发实现了一套AP型分布式系统,实现了最终一致性,且业务接入后运行正常,一切看起来都那么美好。 可是突然有同事说,我们要拉这几个业务的数据做实时分析&#xf…

进口原装二手 Keysight86142B 是德86142A 高性能光谱分析仪

进口原装二手 Keysight86142B 是德86142A 高性能光谱分析仪 内置测试应用程序 • 10 pm 波长精度 • 快速双扫法 • 覆盖 S、C 和 L 波段 Keysight 86142B是一款台式光谱分析仪(OSA),最适于对功率和波长精度、动态范围和低偏振敏感性都要…

asp.net论坛指南系统

说明文档 运行前附加数据库.mdf(或sql生成数据库) 主要技术: 基于asp.net架构和sql server数据库 登陆可查看 浏览记录 TA的发布 TA的回复 TA的收藏 TA的点赞 管理员登陆可以查看举报管理 编辑管理 认证审核 帖子置顶申请审核 运行环境…

【数据处理系列】深入理解递归特征消除法(RFE):基于Python的应用

目录 一、递归特征消除法介绍 二、方法介绍 三、导入数据并选择模型 (一)导入数据 (二) 递归特征消除需要选择模型吗 四、RFE方法进行递归特征消除法 五、RFECV方法进行递归特征消除法(建议使用这种方法) 即交叉验证递归特征消除法 (一)参数介绍 (二)python使用RFECV…

我们真的需要5G吗?再读《5G将是一个彻底的失败通信技术》

目录 投入与产出不成正比 《5G将是一个彻底的失败通信技术》 无线通信技术体制 无线通信技术演进 5G需求 移动通信与WiFi 5G之局 未来之路 参考 投入与产出不成正比 2018年开始大规模装备5G设备,因此2018年被称为5G元年。一般5G基站的寿命为8年左右&#…

GeoServer 任意文件上传漏洞分析研究 CVE-2023-51444

目录 前言 漏洞信息 代码审计 漏洞复现 前言 时隔半月,我又再一次地审起了这个漏洞。第一次看到这个漏洞信息时,尝试复现了一下,结果却很不近人意。从官方公布的漏洞信息来看细节还是太少,poc不是一次就能利用成功的。也是当时…

工器具管理(基于若依)

文章目录 前言一、工器具管理项目总览 二、入库功能1. 前端1.1 界面展示1.2 具体操作实现1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具入库 三、领用功能1. 前端1.1 界面展示1.2 具体实现操作1.3 js文件 2. 后端2.1 工器具信息回显2.2 工器具领用 遇到的问题1. 同一页面展示…

2024最新版守约者二级域名分发系统源码,提供全面的二级域名管理服务

主要功能 二级域名管理:我们的系统提供全面的二级域名管理服务,让您轻松管理和配置二级域名。 下 载 地 址 : runruncode.com/php/19756.html 域名分发:利用我们先进的域名分发技术,您可以自动化地分配和管理域名&…

【教程向】从零开始创建浏览器插件(二)深入理解 Chrome 扩展的 manifest.json 配置文件

第二步:深入理解 Chrome 扩展的 manifest.json 配置文件 上一次我们已经着手完成了一个自己的浏览器插件,链接在这里:我是链接 在本篇博客中,我们将更详细地探讨 Chrome 扩展中的 manifest.json 文件。这个文件是每个浏览器扩展…

keep健身小程序源码搭建/部署/上线/运营/售后/更新

基于FastAdminThinkPHPUniApp(目前仅支持微信小程序和公众号)开发的健身相关行业微信小程序,程序适用于健身房、瑜伽馆、游泳馆、篮球馆等健身培训场所。平台拥有课程售卖、课程预约、多门店管理、私教预约、教练端、会员卡办理、在线商城、分…