[外文理解] 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 亿分之一,满腹怀念-
- 如何更好的理解(pageX,pageY,clientX,clientY,eventX,eventY,scrollX,scrollY,screenX,screenY,event.offsetX,event.offsetY,offsetLeft,style.left)
1 pageX,pageY:鼠标指针相对于当前窗口的X,Y坐标,计算区域包括窗口自身的控件和滚动条.(火狐特有) 2 event.clientX,event.clientY:鼠标指针相对于当前窗口的X ...
- DDD学习笔录——领域驱动设计DDD概念总结
随机推荐
- 通俗理解 模糊自适应PID
模糊自适应PID算法就是在经典的PID的基础上添加模糊控制规则库,建立这个库的目的就是算法能够自己来进行改变P.I.D的值. 就拿温度的上升过程控制来说,刚开始的时候,希望温度能够快速的升到终点温度, ...
- 雷林鹏分享:Lua 数据类型
Lua是动态类型语言,变量不要类型定义,只需要为变量赋值. 值可以存储在变量中,作为参数传递或结果返回. Lua中有8个基本类型分别为:nil.boolean.number.string.userda ...
- 打开VS2015提示“重新启动处于挂起状态。请在启动Visual Studio”之前重新启动
昨晚安装了VS2015,今天打开VS2015提示[“重新启动处于挂起状态.请在启动Visual Studio”之前重新启动] 这里重新启动指的是重启电脑 解决方法: 电脑需要重启电脑
- 2019天梯赛练习题(L2专项练习)
7-2 列出连通集 (25 分) 给定一个有N个顶点和E条边的无向图,请用DFS和BFS分别列出其所有的连通集.假设顶点从0到N−1编号.进行搜索时,假设我们总是从编号最小的顶点出发,按编号递增的顺序 ...
- MySQL数据库常见面试题
什么是存储过程?有哪些优缺点? 存储过程简单来说就是为了以后使用而保存的一条或多条预编译SQL语句,这些语句块像一个方法一样执行一些功能. 优点: 类似于封装,简化操作: 不用反复建立一系列处理步骤, ...
- 转载:better-scroll的相关api
格式:var obj = new BScroll(object,{[option1,],.,.}); 注意:1.要确保object元素的高度比其父元素高 2.使用时,一定要确保object所在的dom ...
- [转载] Asynchronous ActionScript Execution
Asynchronous ActionScript Execution Date September 19, 2009 Language ActionScript 3.0 Target Flash P ...
- bzoj3142[Hnoi2013]数列 组合
Description 小 T最近在学着买股票,他得到内部消息:F公司的股票将会疯涨.股票每天的价格已知是正整数,并且由于客观上的原因,最多只能为N.在疯涨的K天中小T观察 到:除第一天外每天的股价都 ...
- 神秘数(bzoj 4408)
Description 一个可重复数字集合S的神秘数定义为最小的不能被S的子集的和表示的正整数.例如S={1,1,1,4,13}, 1 = 1 2 = 1+1 3 = 1+1+1 4 = 4 5 = ...
- 进程&进程池
进程 服务器中, s.listen(n) n不能无限大,以为内存不可能无限大,n表示内存同一时间接纳的等待连接数,可以看成一个(队列),取出一个拿去建立连接,然后再放进一个,队列中一直保持n个连接 请 ...