赞
踩
在40岁老架构师 尼恩的读者交流群(50+)中,最近有小伙伴拿到了一线互联网企业如字节、阿里、滴滴、极兔、有赞、希音、百度、网易、美团的面试资格,遇到很多很重要的面试题:
DDD 的外部接口调用,应该放在哪一层?
DDD架构,如何落地?
谈谈你的DDD落地经验?
谈谈你对DDD的理解?
如何保证RPC代码不会腐烂,升级能力强?
微服务如何拆分?
微服务爆炸,如何解决?
你们的项目,DDD是怎么落地实操的?
所以,这里尼恩给大家做一下系统化、体系化的梳理,使得大家可以充分展示一下大家雄厚的 “技术肌肉”,让面试官爱到 “不能自已、口水直流”。
也一并把这个题目以及参考答案,收入咱们的 《尼恩Java面试宝典PDF》V155版本,供后面的小伙伴参考,提升大家的 3高 架构、设计、开发水平。
除了本文,尼恩输出了一个 《DDD学习圣经》系列,帮助大家彻底掌握DDD。
同时,尼恩持续输出最新的《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》的PDF,请关注本公众号【技术自由圈】获取,后台回复:领电子书
无论是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通常被用于以下几个方面:
总之,COLA框架中的Gateway扮演着连接不同层和组件之间的桥梁角色,有助于实现应用程序的模块化、可维护和可扩展性。
“聚合”即“高内聚,低耦合”中的“内聚”之意;
聚合是业务和逻辑紧密关联的实体和值对象组合而成,聚合是数据修改和持久化的基本单元,一个聚合对应一个数据的持久化;
聚合在DDD分层架构中属于领域层,领域层包含了多个聚合,共同实现核心业务逻辑,聚合内的实体以充血模型实现个体业务能力,以及业务逻辑的高内聚; 跨多个实体的业务逻辑通过领域服务来实现,跨多个聚合的业务逻辑通过应用服务来实现;
首先我们来看下聚合模式的定义:
将实体和值对象划分为聚合并围绕着聚合定义边界。
选择一个实体作为每个聚合的根,并仅允许外部对象持有对聚合根的引用。作为一个整体来定义聚合的属性和不变量,并把其执行责任赋予聚合根或指定的框架机制。
一个聚合包含一个聚合根(aggregation root)和一些相关的其他领域对象。
在《DDD学习圣经》中,我们讲到了“什么是聚合根”,这里再重复一下。
聚合根中的“聚合”即“高内聚,低耦合”中的“内聚”之意;
而“根”则是“根部”的意思,也即聚合根是一种统领式的存在。
事实上,并不存在一个教科书式的对聚合根的理论定义,你可以将聚合根理解为一个系统中最重要最显著的那些名词,这些名词是其所在的软件系统之所以存在的原因。
为了给你一个直观的理解,以下是几个聚合根的例子:
你可能会问,软件中的概念已经很多了,为什么还要搞出个聚合根的概念?
我们认为这里至少有2点原因:
在实际项目中识别聚合根时,我们需要对业务有深入的了解,因为只有这样你才知道到底哪些业务逻辑是内聚在一起的。
这也是我们一直建议程序员和架构师们不要一味地埋头于技术而要多关注业务的原因。
事实上,如果让一个从来没有接触过DDD的人来建模,十有八九也能设计出上面的订单、客户和交易对象出来。
没错,DDD绝非什么颠覆式的发明,依然只是在前人基础上的一种进步而已,这种进步更多的体现在一些设计原则上,对此我们将在下文进行详细阐述。
技术自由圈,明天发布此题答案
也可以参考 最新版 《尼恩Java面试宝典》 PDF
技术自由圈,明天发布此题答案
也可以参考 最新版 《尼恩Java面试宝典》 PDF
技术自由圈,明天发布此题答案
也可以参考 最新版 《尼恩Java面试宝典》 PDF
具体答案,请参见此文: https://mp.weixin.qq.com/s/80Gza3-9pO8bYlSJoEDVWg
具体答案,请参见此文: https://mp.weixin.qq.com/s/_NAHYDIvmT7EbffXkIpqYw
具体答案,请参见此文:https://mp.weixin.qq.com/s/njBl791vFCd94UplPJEFKw
具体答案,请参见此文: https://mp.weixin.qq.com/s/bExjRkVbDLTV2Wf9G6dzrg
具体答案,请参见此文: https://mp.weixin.qq.com/s/izzUXIpVmURq6hTCEN0ARQ
尼恩特别编著 《DDD学习圣经》
《阿里大佬:DDD 落地两大步骤,以及Repository核心模式》
《极兔面试:微服务爆炸,如何解决?Uber 是怎么解决2200个微服务爆炸的?》
《阿里大佬:DDD中Interface层、Application层的设计规范》
《大厂痴迷DDD:从高德portal重构,看DDD的巨大价值》
《大厂痴迷DDD:从高德portal重构,看DDD的巨大价值》
DDD 相关的面试题,是非常常见的面试题。也是核心面试题。
以上的内容,如果大家能对答如流,如数家珍,基本上 面试官会被你 震惊到、吸引到。
最终,让面试官爱到 “不能自已、口水直流”。offer, 也就来了。
在面试之前,建议大家系统化的刷一波 5000页《尼恩Java面试宝典》V174,在刷题过程中,如果有啥问题,大家可以来 找 40岁老架构师尼恩交流。
另外,如果没有面试机会,可以找尼恩来帮扶、领路。
女程序员如何成为DPM,请参见:
DPM (双栖)陪跑,助力小白一步登天,升格 产品经理+研发经理
领跑模式,尼恩已经指导了大量的就业困难的小伙伴上岸。
前段时间,领跑一个40岁+就业困难小伙伴拿到了一个年薪100W的offer,小伙伴实现了 逆天改命 。
另外,尼恩也给一线企业提供 《DDD 的架构落地》企业内部培训,目前给不少企业做过内部的咨询和培训,效果非常好。
……完整版尼恩技术圣经PDF集群,请找尼恩领取
《尼恩 架构笔记》《尼恩高并发三部曲》《尼恩Java面试宝典》PDF,请到下面公号【技术自由圈】取↓↓↓
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。