采用cqrsnode框架开发的DDD CQRS例子
首先我们开发 Aggre 类 User
cqrsnode框架主页https://github.com/brighthas/cqrsnode
|
[该贴被brighthas于2012-09-19 08:41修改过]
[该贴被brighthas于2012-09-19 08:46修改过]
首先我们开发 Aggre 类 User
cqrsnode框架主页https://github.com/brighthas/cqrsnode
|
很好,是DDD+Event Sourcing,而不是简单的ES, 是围绕领域模型为核心,而不是领域模型被"强奸"被驱使,是领域模型发出事件通过事件中线趋势架构。
谢谢 banq大哥鼓励! 我继续我的罗嗦。。。
然后我们开发一个监听事件的方法, eventHandles/UserchangeName.js
|
那么,我们如何操作DDD领域对象呢? 答案是需要创建 Command , 就是 CQRS说的Command
如下: commands/ChangeUserName.js
|
我们有了 Command 我们还需要 Command Handle ,所以我们需要创建 commandHandles/ChangeUserName.js
这里也有个约定,就是handle和command名字要一致。
|
那么,肯定要有个 run 的启动方法了。 取名 run.js 吧。
|
就介绍这些吧,适合对CQRS概念了解的童鞋看。
[该贴被brighthas于2012-09-19 09:45修改过]
我觉得banq判断代码的标准有些不准确吧!
楼主的代码,我看了下,只有一个user模型,user中有一个changName的方法,changeName方法触发事件,首先改变user模型自己的状态,然后通过事件总线发布出去,这难道不是标准的event sourcing吗?为什么说不是简单的ES。那请问简单的ES是怎样的?判断的依据是什么?
另外,我之前的帖子中,你对我的代码点评时都用了很多其他概念去审视,比如DCI架构,并且认为我的代码中model直接和event source绑定,所以认为不是DDD。那为什么他的代码中根本没用到DCI,也没有角色的概念,为什么就是DDD了呢?
如果你是依据模型是否处于主动地位来判断是否是DDD,那我的代码与楼主的代码的唯一区别就是模型的方法被谁调用的问题,楼主是在command handler中调用模型的方法,然后由模型发出事件驱动其他东西;而我的代码是通过应用层服务去调用模型的方法,然后也是发出事件驱动其他东西。
这有本质区别吗?请指教,呵呵。
我赞赏的做法是:用户 操作 UI====>发出 Command ==>模型 ===>事件。这是典型一个CQRS做法。
如果你的代码也是这样,那可能是我眼花,看错了,对不起了。
这个不只是一个EventStore,而是以领域核心为中心的。你需要阅读全部的CQRS DDD,阅读全部的BANQ的文章,就会慢慢领会 CQRS 了,BANQ他说话很婉转,但我可以负责的和你说: 你还需要阅读大量 DDD CQRS 的东东,希望你能接受这个意见。
呵呵,我相信我读的这方面的东西比你想象的要多的多。
我希望的是说要说有意义的话,比如你问我就答,我问你就答,而不是我问,然后你说就是这样的,无需解释,要知道原因,自己去看banq以前写的这么多东西。那如果每个人都像你这样说话,那就不存在讨论了。
我希望每个人说话的方式都是摆事实讲道理,得出观点的同时会给出思路或理论依据或例子。否则,我只会觉得你在空谈。
干我们这一行的难道不应该是思维严密,逻辑严谨的吗?任何大理论或大的架构,都是很注重细节的。只有细节的差别搞清楚,才能真正懂得架构或框架的意义。
[该贴被tangxuehua于2012-09-20 13:39修改过]
路还有很远,慢慢学习吧。呵呵,说多无益。
问一下,如果名称有这样的规则:名称里只允许英文和字母。
那这个判断加在哪里呢?
user的changeName方法里,还是updateDate里