原文:关于领域模型与技术架构的关系的思考

人类社会的一切事物都是来源于对造物主智慧的学习,人类本身是不会创造任何东西的。
外国新技术并不能作为软件架构的终极准则,因为老外也是人。我认为客观世界的架构应该是软件架构的唯一准则,换而言之,上帝也是一个架构师,而这个客观世界就是他的作品。
有这么完美的学习对象,为什么要舍本逐末呢?
就拿领域对象的设计来说,在客观世界中,人如果要做某件事情,比如扫地这个动作,扫地难道是人自己完成的吗?其实扫地是人借助扫帚这个工具完成的。
换而言之,领域对象的一些动作,也根本不属于他自己,如果你把这些动作硬要强加在领域对象身上,就肯定会出现类似领域对象中调用技术层这种别扭的问题。
比如,经常有什么贫血对象,和充血对象之类的讨论,这其实很可笑,保存、删除、这些概念,本身是在计算机领域才存在的概念,现在大家都想把他强加在领域对象上,领域对象本身是对业务的模拟,怎么可能有这些动作?大家也觉的不妥,于是就绕弯弯,想发明一种说法和思想,自己说服自己,让这件事情变的合理。但是这在本质上就是错误的,这种追求也是徒劳的。
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主要目的是为解决如何将领域模型和技术架构进行解耦,让领域模型不依赖于特定的技术架构实现,从而可以让领域模型真正反映纯粹的业务模型。

关于领域模型与技术架构的关系的思考相关推荐

  1. 软件工程中技术架构和组织架构的关系

    一. 软件工程中技术架构和组织架构的关系 不知道你有没有观察过:通常系统架构和组织架构是相似的.比如说前后端分离的架构,那么在组织上一般也会分前端组和后端组:而微服务架构,则分组是和服务相关的,可能一 ...

  2. 架构漫谈(九):理清技术、业务和架构的关系

    本文是漫谈架构专栏的第九篇,作者以钻木取火为切入点,深入介绍了技术.业务和架构之间的关系.正如作者所说,技术总是在人类解决对业务的要求不断提高的情况下产生,目的也是为了获取更大更好的利益. 背景 某天 ...

  3. .Net微服务实战之技术架构分层篇

    一拍即合 上一篇<.Net微服务实战之技术选型篇>,从技术选型角度讲解了微服务实施的中间件的选择与协作,工欲善其事,必先利其器,中间件的选择是作为微服务的基础与开始,也希望给一直想在.Ne ...

  4. 架构设计实践五部曲(五):技术架构的战略和战术原则

    技术架构,是将产品需求转变为技术实现的过程.技术架构解决的问题包括了如何进行纯技术层面的分层.开发框架选择.语言选择(这里以 JAVA 语言为主).涉及到各自非功能性需求的技术点(安全.性能.大数据) ...

  5. 支付业务与技术架构学习总结(2)——到底什么才是银行业务架构?

    业务架构大家常听到也常见到(如下图就是某银行的业务架构图),那么这个图就是业务架构的全部吗?那么到底什么是业务架构?为什么会有业务架构?业务架构应该面向哪些人,包含什么内容?本文集合作者经验和查阅相关 ...

  6. 一文看懂docker容器技术架构及其中的各个模块

    概述 今天主要简单介绍下docker的技术架构及其中组成的各个模块. 技术架构 distribution 负责与docker registry交互,上传洗澡镜像以及v2 registry 有关的源数据 ...

  7. 德国SNS交友/视频网站Poppen.de的技术架构分享

    Poppen.de是一个德国的 交友/ 聊天/ 视频 的SNS网站, 部分内容NSFW,网站采用了很多我们熟悉的技术,像Nginx ,MySQL,CouchDB,Erlang,Memcached的,R ...

  8. 【超赞】技术架构的战略和战术原则

    欢迎关注方志朋的博客,回复"666"获面试宝典 技术架构,是将产品需求转变为技术实现的过程.技术架构解决的问题包括了如何进行纯技术层面的分层.开发框架选择.语言选择(这里以 JAV ...

  9. 技术架构的战略和战术原则

    技术架构,是将产品需求转变为技术实现的过程.技术架构解决的问题包括了如何进行纯技术层面的分层.开发框架选择.语言选择(这里以 JAVA 语言为主).涉及到各自非功能性需求的技术点(安全.性能.大数据) ...

  10. 蚂蚁金服十五年技术架构演进之路

    来自:蚂蚁金服科技 蚂蚁金服过去十五年,通过技术重塑了支付服务.小微贷款服务.我们认为 Blockchain (区块链).Artificial intelligence(人工智能).Security( ...

最新文章

  1. 零起点学算法07——复杂一点的表达式计算
  2. 收藏 | CNN的一些可视化方法!
  3. OSPF(Open Shortest Path First开放式最短路径优先)
  4. 【Android 热修复】热修复原理 ( 修复包 Dex 文件准备 | Dex 优化为 Odex | Dex 文件拷贝 | 源码资源 )
  5. 计算机电路基础张志良,计算机电路基础
  6. 仪表盘刻度调整_惊艳了我的仪表盘 那些年我遇到最美的“面孔”
  7. 课后作业一 小九九 课后作业二 任意一个数在此范围被七整除的个数...
  8. linux知识点查阅
  9. java 下载项目中的文件_java 下载web项目目录下的文件
  10. pyecharts制作交互式数据展示地图
  11. 【语音识别】基于matlab GUI HMM 0~9数字和汉字语音识别(带面板)【含Matlab源码 1716期】
  12. CRMEB商城打通版 v3.0发布
  13. 从物理到软件工程,中山大学转专业2017纪实
  14. LABjs分析 http://labjs.com/documentation.php#queuescript
  15. 人脸识别技术开发解决方案,人脸识别智慧工地应用开发
  16. 好友返利网站开发 一
  17. 《雍正皇帝·九王夺嫡》生态文化专有词泰译研究(第一章)
  18. 心情随笔(一):五月随笔满满的正能量
  19. Python界面设计之Label
  20. gdiplus图像库的使用

热门文章

  1. Atitit 虚拟经济世代 与 知识管理
  2. Atitit.创建快捷方式 windows快捷方式的原理
  3. paip. 定时 关机 休眠 的总结
  4. Julia :复合类型struct当索引时
  5. 阿里弹性云手机正式公测
  6. 阿里云实时数据加工服务的设计及实践
  7. 第十届中国开源黑客松等你来
  8. slots游戏html5开发,unity自定义游戏框架Custom Slots fr amework 1.4
  9. 最新的ndkr20编译c_Android NDK-r20 交叉编译 FFmpeg 4.2
  10. 【图像加密】基于matlab GUI彩色图像加密解密(带面板)【含Matlab源码 1231期】