发帖    主题    评论    推荐    标签    作者    订阅    查搜    注册   登陆   关注
 
面向对象 设计模式 领域驱动设计 企业架构 框架 开发教程 微服务 CQRS 扩展性 并发编程 事件溯源 分布式 SOA

领域驱动设计其实是语言学

         
2014-01-02 08:46
赞助商链接



如果我给你五十万欧元,你会很高兴。如果我给你一百万欧元,但在回家的路上,你遭受抢劫失去五十万,你会不高兴,即使最终的结果是一样的。在心理学上,这叫做损失厌恶。

也就是说,损失比收益对我们有着更高的影响。我们不是纯理性的经济动物。拥有一百万是你的状态,你遭受抢劫行为后,虽然状态还是50万,但是抢劫造成的损失行为要超过你的收益状态。导致状态的行为比实际状态本身更重要。

领域驱动设计如此吸引人,因为软件开发历来主要是关于数学,是技术问题。 DDD使语言学成为中心问题。用一个公式表达: F(X) = y和G(X) = Y = / = > F = G或:正因为两种行为导致同样的结果,并不意味着他们是可替换的。

在领域驱动建模中,状态是行为的副作用。状态是只具有影响新行为的潜力。一个聚合并不只是一群对象组合在一起,代表某种状态,聚合还管理着其子对象彼此的行为,只有相关行为才能改变相关状态。

Event Sourcing 根据这种思想推导出一个逻辑结论,我们忘记持久状态,而是持久那些导致状态改变的领域事件,我们保存的是行为而不是结果。

当我们需要状态,我们重播事件并解释它们。这样做的好处是,如果我们改变行为的有关解释,我们可以不必坚持过去的状态。也就是说,改变行为代码后,过去的状态也改变了,但是这也许正是我们需要的,让我们对业务逻辑有更灵活的掌控。

1
2014-01-02 21:37

参考我以前转贴的一位国内哲人的文章:

动词是个独裁者:
http://www.jdon.com/44986

人们对动词是敏感要超过名词,因此,在需求中找出实体名词可能要难于找出动词,这也是Node.js适合做主流大型系统吗?一文中作者大骂对象是地狱,设计模式是坏的原因吧。以前的面向对象都过于重视静态的结构名词了。

这也是建模风暴中,首先从领域事件这个动词入手,再开始引入模型名词的原因。当然这也符合BDD行为驱动开发等敏捷方法。

BDD通过用户故事来表达需求,并且以Given, When, Then方式来表达,而我们的领域事件则可以按照这种结构,比如在什么场景下,当什么命令进来,什么模型发生了什么事件,我们从这里开发分析需求会发现更容易些,因为我们人类对动词更敏感。

当然因为我们对动词敏感,所以过去我们才容易写出面向过程的铁板一块的代码,经过用名词对象切分过程,再到今天动词驱动或函数编程,实则是否定之否定。


[该贴被banq于2014-01-02 21:39修改过]

2014-01-03 22:19

以前我也说过,刺激和响应才是业务逻辑的本质,这自然是动态的。但刺激和响应又是复杂的、有层次的,所以又必须弄清楚其结构。一味地强调静态是不对的,一味地强调动态也是有问题的。最自然的一定是动静平衡的。

赞助商链接

赞助商链接

返回顶部

移动版 关于本站 使用帮助 联系反馈 最佳分辨率1366x768
OpenSource JIVEJDON Powered by JdonFramework Code © 2002-20 jdon.com