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架构的更多相关文章

  1. [外文理解] DDD创始人Eric Vans:要实现DDD原始意图,必须CQRS+Event Sourcing架构。

    原文:http://www.infoq.com/interviews/Technology-Influences-DDD# 要实现DDD(domain drive  design 领域驱动设计)原始意 ...

  2. 【DDD/CQRS/微服务架构案例】在Ubuntu 14.04.4 LTS中运行WeText项目的服务端

    在<WeText项目:一个基于.NET实现的DDD.CQRS与微服务架构的演示案例>文章中,我介绍了自己用Visual Studio 2015(C# 6.0 with .NET Frame ...

  3. Lind.DDD敏捷领域驱动框架~Lind.DDD各层介绍

    回到目录 Lind.DDD项目主要面向敏捷,快速开发,领域驱动等,对于它的分层也是能合并的合并,比之前大叔的框架分层更粗糙一些,或者说更大胆一些,在开发人员使用上,可能会感觉更方便了,更益使用了,这就 ...

  4. 基于DDD的现代ASP.NET开发框架--ABP系列之3、ABP分层架构

    基于DDD的现代ASP.NET开发框架--ABP系列之3.ABP分层架构 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP的官方网站:ht ...

  5. DDD CQRS和Event Sourcing的案例:足球比赛

    在12月11日新的有关DDD CQRS和Event Sourcing演讲:改变心态- 以更加面向对象视角看待业务领域建模中,作者以足球比赛football Match为案例说明传统编程方法和CQRS的 ...

  6. 阅读文章《DDD 领域驱动设计-如何 DDD?》的阅读笔记

    文章链接: https://www.cnblogs.com/xishuai/p/how-to-implement-ddd.html 文章作者: 田园里的蟋蟀 首先感谢作者写出这么好的文章. 以下是我的 ...

  7. DDD 领域驱动设计-如何 DDD?

    注:科比今天要退役了,我是 60 亿分之一,满腹怀念-

  8. DDD学习笔录——领域驱动设计DDD概念总结

  9. DDD中Dto领域驱动设计概述,摘自《NET企业级应用架构设计》

随机推荐

  1. Java虚拟机中的内存分配

    java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途以及创建和销毁的时间. 栈:存放的是局部变量,包括:1.用来保存基本数据类型的值:2.保存类 ...

  2. flexpaper二次开发

    1.首先下载FlexPaper的源码.下载地址 2.本人不懂flash,只是百度下,然后自己瞎弄弄的.我用的flash build 4.5 提供个key:1499-4181-9296-6452-299 ...

  3. hibernate--多对多双向关联(少用)

    老师知道自己教了哪些学生, 学生也知道教自己的有哪些老师. Teacher.java: package com.bjsxt.hibernate; import java.util.HashSet; i ...

  4. 外网主机访问虚拟机下的Web服务器_服务器应用_Linux公社-Linux系统门户网站

    body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...

  5. AWK用法入门详解

    简介 awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大.简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再 ...

  6. Mac下安装包管理平台Homebrew(Mac 10.12)

    在终端上输入: /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/maste ...

  7. 2、手把手教你Extjs5(二)项目中文件的加载过程

    上一节中用sencha工具自动创建了一个项目,并且可以在浏览器中查看.现在我们来看看js类加载过程.如下图所示: 1、首先:浏览器中输入 localhost:1841 ,调用 index.html; ...

  8. MySQL show status命令参数

    Aborted_clients         由于客户没有正确关闭连接已经死掉,已经放弃的连接数量.   Aborted_connects 尝试已经失败的MySQL服务器的连接的次数.   Binl ...

  9. LPC1788定时器使用

    #ifndef __TIM_H_ #define __TIM_H_ #include "common.h" extern u8 tim1_mr0_flag; void tim0_c ...

  10. 使用Emacs中的org-mode写cnblogs之图片插入

    .title { text-align: center; margin-bottom: .2em } .subtitle { text-align: center; font-size: medium ...