DDD项目现在实施的问题

CQRS+Event Sourcing其实不但是一种全新思想,将可能颠覆Java或C现有的编程体系

使用传统JavaEE或Spring + Hibernate这样的框架,是无法实现DDD原始意图的,这个DDD创始人Eric Vans已经说过:2012年Eric Evans关于技术如何影响DDD的会话

要实现DDD原始意图,必须CQRS+Event Sourcing。

提供基于Jdonframework实现的CQRS 源码:
为帮助大家更好理解本PPT,用Jdonframework将Match源码完整写成可运行的项目:

Match完整源码按这里

也可以通过打包下载:example.rar

内中含有DCI+CQRS和CQRS+EventSourcing两种案例。

其他案例:
(1)选用新的编程语言Scala,文章:Scala的event-sourced和CQRS案例代码
(2)Axon的Axon-trader案例

有人说,我一定要用Spring来实现,那么会导致什么后果呢?
因为Spring不支持Domain Event,只能将外部接口直接注入到领域模型,很多接口会污染领域模型,最后领域模型还是被外币接口或架构绑架了,这时被绑架的领域模型就成了扁平的“数据”,而不是活生生的“语言”。

这严重违背DDD中聚合根是语言核心,编程代码必须反映统一语言,这个反复重申的要旨,难道我们重申这个只是理论喊口号吗?如果它不如此具有颠覆性,我们反复强调它干吗?如果不是因为现在所谓经典做法完全违反这种要旨,我们苦口婆心地说它干吗呢?

当然,该PPT也去除了Hibernate等ORM注解,因为它也严重绑架干扰了领域模型,干扰领域模型如实成为统一语言。

所以,尽管Jdon两年前就在讨论DDD CQRS ES,并且也推出这样的开源框架,这些都是一种探索,是不是代表未来不能确定,但是如果这是未来,我相信这是JavaEE或Spring必须跟上的,但是Java C语言本身带来的限制,还是不如新语言Scala等要优雅。尽管jdonframework使用Disruptor实现了领域事件,也是通过领域模型的注入实现,虽没有Scala的Actor那么直接,但是性能和简洁不亚于Actor。

如果各位有意在自己项目中实施DDD,而且不改用框架,那么出来的效果会很差,还不如还是使用本文开始批评的贫血模型,把业务方法都放入Service中。这种号称SOA架构也就是面向服务的架构很容易将服务做出面向过程的大函数,拓展维护性都很差。

如果你对JavaEE认识或面向对象设计OO不够Strong,那么也请不要选择DDD,你遇到的概念和思路转变不是象学习一门语言那么简单,项目有风险,实施需谨慎。

[该贴被banq于2012-12-19 13:45修改过]

2012-12-18 19:25 "@banq"的内容
如果你对JavaEE认识或面向对象设计OO不够Strong,那么也请不要选择DDD,你遇到的概念和思路转变不是象学习一门语言那么简单,项目有风险,实施需谨慎。 ...

确实,我相信现在还是有太多的公司依然是走 ER模型->数据库表->类 这种事务脚本式编程(我们就是 %>_<%),因为很多都是小公司,小项目,这么做也不会暴露多大的问题,哎。。。不知何时才能改变。。。

2012-12-18 19:25 "@banq"的内容
如果你对JavaEE认识或面向对象设计OO不够Strong,那么也请不要选择DDD,你遇到的概念和思路转变不是象学习一门语言那么简单,项目有风险,实施需谨慎。 ...

呵呵,当DDD没有上面的缺点的话,就会有公司用了

2012-12-18 19:25 "@banq"的内容
当然,该PPT也去除了Hibernate等ORM注解,因为它也严重绑架干扰了领域模型,干扰领域模型如实成为统一语言。 ...

架构会影响领域模型描述的精确性,会因架构问题而妥协,跟所谓“统一语言”有什么关系,只有人对领域认识才是关键。

我觉得并不需要追求完美的统一写法。

DDD推崇的应该是统一思想,只要处理方式和想法一致,用什么框架,用什么写法,用什么注解,并不重要。

比如JDON,我觉得已经不只是在统一DDD的思想,也走上了统一代码写法的道路。实际上它也是个框架,也许它的设计更漂亮地诠释了DDD,但在现阶段无论从国内用户接受程度,以及对老系统的兼容需求上考虑,包括用spring对第三方系统和相关技术的对接整合的便捷上,实现一个基于spring mybatis这些主流框架的DDD案例对DDD在国内的落地以及消除误解减少争论上都更具有重大意义。

不求完美,可先追求大的代码质量提升,当人们熟悉了这种思想,能够去对比思考不同的框架实现时,DDD才会更繁荣。
[该贴被ahyyxx222于2013-01-16 11:05修改过]

Spring推出Reactor,应该可以在Spring程序中引入Event Sourcing,完整的CQRS架构的Spring程序有望推出。
http://www.jdon.com/45395

Stuff - a REST, CQRS, EventSourcing, DCI, functional example
https://github.com/logicalguess/stuff
这个是其它人fork出来的,原来的project打不开了

2013-05-14 16:08 "@lshoo
"的内容
Stuff - a REST, CQRS, EventSourcing, DCI, functional example ...

嗯,看了一下,不错,其特点是使用DCI实现Event Sourcing, 在DCI的交互场景中将事件和模型进行组装,这是一种在内部组合式的方式,与通过消息机制实现Event Sourcing正好相反。可以拓展眼界。