DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构
http://www.infoq.com/interviews/Technology-Influences-DDD#
要实现DDD(domain drive design 领域驱动设计)原始意图,必须CQRS+Event Sourcing。
CQRS+Event Sourcing其实不但是一种全新思想,将可能颠覆Java或C#现有的编程体系。
使用传统JavaEE或Spring + Hibernate这样的框架,是无法实现DDD原始意图的,这个DDD创始人Eric Vans已经说过:2012年Eric Evans关于技术如何影响DDD的会话
提供基于Jdonframework实现的CQRS 源码,ES部分稍微拓展一下即可:Robot.rar,文章见DDDDCI和领域事件
或者选用新的编程语言Scala,文章:Scala的event-sourced和CQRS案例代码
有人说,我一定要用Spring来实现,那么会导致什么后果呢?
因为Spring不支持Domain Event,只能将外部接口直接注入到领域模型,很多接口会污染领域模型,最后领域模型还是被外币接口或架构绑架了。
这严重违背DDD中聚合根是语言核心,编程代码必须反映统一语言
这个反复重申的要旨,难道我们重申这个只是理论喊口号吗?如果它不如此具有颠覆性,我们反复强调它干吗?如果不是因为现在所谓经典做法完全违反这种要旨,我们苦口婆心地说它干吗呢?
当然,该PPT也去除了Hibernate等ORM注解,因为它也严重绑架干扰了领域模型,干扰领域模型如实成为统一语言。
所以,尽管Jdon两年前就在讨论DDD CQRS ES,并且也推出这样的开源框架,这些都是一种探索,是不是代表未来不能确定,但是如果这是未来,我相信这是JavaEE或Spring必须跟上的,但是Java C#语言本身带来的限制,还是不如新语言Scala等要优雅。尽管jdonframework使用Disruptor实现了领域事件,也是通过领域模型的注入实现,虽没有Scala的Actor那么直接,但是性能和简洁不亚于Actor。
如果各位有意在自己项目中实施DDD,而且不改用框架,那么出来的效果会很差,还不如本文开始批评的贫血模型,把业务方法都放入Service中。
如果你对JavaEE认识或面向对象设计OO不够Strong,那么也请不要选择DDD,你遇到的概念和思路转变不是象学习一门语言那么简单,项目有风险,实施需谨慎。
另外一篇文章可读 http://www.jdon.com/44491
DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构的更多相关文章
- [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。
原文:http://www.infoq.com/interviews/Technology-Influences-DDD# 要实现DDD(domain drive design 领域驱动设计)原始意 ...
- 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端
在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...
- Lind.DDD敏捷领域驱动框架~Lind.DDD各层介绍
回到目录 Lind.DDD项目主要面向敏捷,快速开发,领域驱动等,对于它的分层也是能合并的合并,比之前大叔的框架分层更粗糙一些,或者说更大胆一些,在开发人员使用上,可能会感觉更方便了,更益使用了,这就 ...
- 基于DDD的现代ASP.NET开发框架--ABP系列之3、ABP分层架构
基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:ht ...
- DDD CQRS和Event Sourcing的案例:足球比赛
在12月11日新的有关DDD CQRS和Event Sourcing演讲:改变心态- 以更加面向对象视角看待业务领域建模中,作者以足球比赛football Match为案例说明传统编程方法和CQRS的 ...
- 阅读文章《DDD 领域驱动设计-如何 DDD?》的阅读笔记
文章链接: https://www.cnblogs.com/xishuai/p/how-to-implement-ddd.html 文章作者: 田园里的蟋蟀 首先感谢作者写出这么好的文章. 以下是我的 ...
- DDD 领域驱动设计-如何 DDD?
注:科比今天要退役了,我是 60 亿分之一,满腹怀念-
- DDD学习笔录——领域驱动设计DDD概念总结
- DDD中Dto领域驱动设计概述,摘自《NET企业级应用架构设计》
随机推荐
- Cocos2dx 3.1.1 将一个2.X的项目改成3.1版本
最近在论坛上下载到了一个Cocos2dx的单机跑酷例子, 也不知道是2.x版的, 花了一天时间试着把他改成3.1.1的试试, 现在已经可以顺利编译的, 但是还是有Heap Free的问题,调试了好几天 ...
- iOS开发——实时监控网速(仅作参考,发现一点问题)
开发中用到获取网速的地方,应该就两种: 1.下载速度,这种可以直接在接受数据的地方统计计算.这个就不讲了. 2.获取手机网卡的数据,可以监控网卡的进出流量,下面就是. #import "Vi ...
- mac android studio 更新sdk的解决方案
试试这个,能解决国内访问Google服务器的困难 启动 Android SDK Manager ,打开主界面,依次选择「Tools」.「Options...」,弹出『Android SDK Manag ...
- Django 缓存系统
Django 是动态网站,一般来说需要实时地生成访问的网页,展示给访问者,这样,内容可以随时变化,但是从数据库读多次把所需要的数据取出来,要比从内存或者硬盘等一次读出来 付出的成本大很多. 缓存系统工 ...
- linux中vi和vim编辑工具
linux中知名的还有emacs,功能比vim还要强大 vim 如果文件存在vim是打开这个文件,若果不存在,则先新建再打开 命令模式:任何模式都可以通过Esc回到命令模式,命令模式可以通过命令进行选 ...
- 14、手把手教你Extjs5(十四)模块字段和Grid列的定义[2]
model和columns生成好了,下面要修改一下Module.js和Grid.js中的代码,使其能够协同工作. /** * 一个模块的主控界面的容器,用来安放各个模块控件以及协调他们之间的关系 */ ...
- UIP源码之ARP过程分析
之前我们使用UIP实现了tcp和udp通讯今天来说说UIP的实现流程,当然,这篇文章里面只会涉及tcp和udp,暂时还没办法说DHCP,因为UIP的DHCP实现使用了协程的概念,下一章将协程之后再说D ...
- iOS8推送消息的快速回复处理
http://blog.csdn.net/yujianxiang666/article/details/35260135 iOS8拥有了全新的通知中心,有全新的通知机制.当屏幕顶部收到推送时只需要往下 ...
- BCB实现BMP图片的RGB分解(转)
源:BCB实现BMP图片的RGB分解 1.打开BMP图片文件,在Image控件中显示: if(dlgOpen1->Execute()) { edt1->Text=dlgOpen1-> ...
- IOS即时通讯XMPP搭建openfire服务器 分类: ios技术 2015-03-07 11:30 53人阅读 评论(0) 收藏
一.下载并安装openfire 1.到http://www.igniterealtime.org/downloads/index.jsp下载最新openfire for mac版 比如:Openfir ...