关于领域模型与技术架构的关系的思考
2023-09-14 09:01:05 时间
外国新技术并不能作为软件架构的终极准则,因为老外也是人。我认为客观世界的架构应该是软件架构的唯一准则,换而言之,上帝也是一个架构师,而这个客观世界就是他的作品。
有这么完美的学习对象,为什么要舍本逐末呢?
就拿领域对象的设计来说,在客观世界中,人如果要做某件事情,比如扫地这个动作,扫地难道是人自己完成的吗?其实扫地是人借助扫帚这个工具完成的。
换而言之,领域对象的一些动作,也根本不属于他自己,如果你把这些动作硬要强加在领域对象身上,就肯定会出现类似领域对象中调用技术层这种别扭的问题。
比如,经常有什么贫血对象,和充血对象之类的讨论,这其实很可笑,保存、删除、这些概念,本身是在计算机领域才存在的概念,现在大家都想把他强加在领域对象上,领域对象本身是对业务的模拟,怎么可能有这些动作?大家也觉的不妥,于是就绕弯弯,想发明一种说法和思想,自己说服自己,让这件事情变的合理。但是这在本质上就是错误的,这种追求也是徒劳的。
DOMAIN就应该只关注于领域对象之间的关系和行为就足够了,涉及到技术的,都交给其他层完成,而不是非要在DOMAIN中加上技术性的操作,你觉得别扭,这是必然的,因为在原本的业务概念中,根本不存在这中技术性的概念!领域对象,应该仅仅关注自身状态和行为,以及和其他领域对象之间关系的建立,至于一切计算机领域的概念(比如保存、删除这些概念),都不应该出现在领域对象中,因为这是违背自然规律的组合,或者说是违背业务概念的。
领域模型中的对象之间既然有关系,就肯定需要相互协作共同完成某个更大的业务逻辑;那么如何协作呢?目前最优雅并能确保领域对象处于核心主动地位的方式是通过Domain Event;在C#,Java这样的语言中,对象天生并不具备发送消息和接收消息的能力,需要依赖于外部框架;而像Scala的Akka那种Actor Model,一个领域对象就是一个Actor,Actor能够通过发送异步消息和其他Actor通讯联系,这种消息发送是异步的,属于“fire-and-forget”方式。那么在C#这样的语言下,我们可以通过Domain Event也可以达到类似Actor一样的效果;
Domain Event是EDA(Event Driven Architecture)思想的一种体现,EDA原本是用于SOA(Service Oriented Architecture)中,服务与服务之间的通信;Domain Event则是将EDA用于领域对象之间的通信;
引入Domain Event主要目的是为解决如何将领域模型和技术架构进行解耦,让领域模型不依赖于特定的技术架构实现,从而可以让领域模型真正反映纯粹的业务模型。
你真的需要防腐层吗?DDD 系统间的7种关系梳理与实践 当提到系统间交互的时候,人们都会想到大名鼎鼎的防腐层,用来防止其他系统的模型变更对本系统造成影响。但是在实践这个模式的过程中,我们常常会遇到问题。此时我们也应该考虑下其他的系统交互方式。
架构视角-到底如何做好分层 在进行程序开发和设计时我们常常提到分层的概念,但是怎么样的分层才是好的分层呢,这篇谈谈在如何分层这个问题上的一些体会,和大家探讨一下
DDD 领域驱动设计落地实践系列:工程结构分层设计 前面几篇文章中,笔者给大家阐述了 DDD 领域驱动设计的三大过程,重点围绕如何通过战略设计与战术设计进行 DDD 落地实践进行了详细的讨论,但是还没有涉及到工程层面的落地。实际上所有的这些架构理论到最后都是为了使得我们代码结构更加清晰,从而开发出 bug 少、扩展性强、逻辑清楚的应用。因此本文就是为了解决 DDD 领域驱动落地实践最后一公里问题,将我们分析出来的领域模型通过与工程结构的映射实现真正的落地。
netfocus 对DDD领域驱动设计感兴趣,在.NET/JAVA平台都有多年工作经验。架构方面专注于CQRS/Event Souring/EDA架构的研究和框架开发。热衷于开源,拥有两个个人开源项目:ENode,EQueue
你真的需要防腐层吗?DDD 系统间的7种关系梳理与实践 当提到系统间交互的时候,人们都会想到大名鼎鼎的防腐层,用来防止其他系统的模型变更对本系统造成影响。但是在实践这个模式的过程中,我们常常会遇到问题。此时我们也应该考虑下其他的系统交互方式。
架构视角-到底如何做好分层 在进行程序开发和设计时我们常常提到分层的概念,但是怎么样的分层才是好的分层呢,这篇谈谈在如何分层这个问题上的一些体会,和大家探讨一下
DDD 领域驱动设计落地实践系列:工程结构分层设计 前面几篇文章中,笔者给大家阐述了 DDD 领域驱动设计的三大过程,重点围绕如何通过战略设计与战术设计进行 DDD 落地实践进行了详细的讨论,但是还没有涉及到工程层面的落地。实际上所有的这些架构理论到最后都是为了使得我们代码结构更加清晰,从而开发出 bug 少、扩展性强、逻辑清楚的应用。因此本文就是为了解决 DDD 领域驱动落地实践最后一公里问题,将我们分析出来的领域模型通过与工程结构的映射实现真正的落地。
netfocus 对DDD领域驱动设计感兴趣,在.NET/JAVA平台都有多年工作经验。架构方面专注于CQRS/Event Souring/EDA架构的研究和框架开发。热衷于开源,拥有两个个人开源项目:ENode,EQueue
相关文章
- 下一代搜索技术:软件管家堪比真人管家
- 【华为云技术分享】基于ModelArts AI市场算法MobileNet_v2实现花卉分类,支持CPU、GPU、Ascend推理
- 【华为云技术分享】最终,我决定将代码迁出x86架构!
- 基于CSE的微服务架构实践-轻量级架构技术选型
- 一、大型网站技术架构演化
- 云原生事件驱动引擎(RocketMQ-EventBridge)应用场景与技术解析
- Java后端整体架构技术栈及工具说明
- 分解企业园区网各模块所需的技术
- 网络防火墙技术
- Google专家深度解读VR影片拍摄、后期处理技术
- SAP移动解决方案之Cordova技术架构综述
- Atitit 知名技术 it 互联网会议
- DL之CNN:计算机视觉之卷积神经网络算法的简介(经典架构/论文)、CNN优化技术、调参学习实践、CNN经典结构及其演化、案例应用之详细攻略
- 【阿里在线技术峰会】李金波:企业大数据平台仓库架构建设思路
- Interview:算法岗位面试—10.10下午—上海某银行算法岗位(偏数据分析,四大行之一)的技术面—关于项目的考察
- 【华为云技术分享】六步教你玩转DevOps上华为云DevCloud实践
- 应用架构步入“无服务器”时代 Serverless技术迎来新发展
- 多云架构下,JAVA微服务技术选型实例解析
- 【华为云技术分享】降本增效的背后:华为云瑶光数字化经营实战
- 基于CSE的微服务架构实践-Spring Boot技术栈选型
- 【华为云技术分享】《跟唐老师学习云网络》—我的网络概念
- 讲讲微服务架构对 业务/产品/技术 带来的帮助
- 《云数据中心网络架构与技术》读书笔记 | 第6章 构建数据中心的逻辑网络(Overlay网络)
- PostgreSQL的学习心得和知识总结(六十一)|深入理解PostgreSQL数据库 开源扩展tablefunc实现层次查询connectby函数 的原理技术
- 【计算机三级数据库技术】第6章 高级数据查询--附思维导图
- H3C交换机网络架构技术名词注解