By Experience的三个层次 -- 领域驱动设计的经验之谈

这真的是一篇经验之谈,是谈经验的,是我在去年DDD大会的演讲主题,现在整理出来和大家分享。

以下是一个电商场景的简化版事件风暴,这可能需要我们有一些事件风暴的背景。我把一些非关键的事件用省略号代替了,只留下了一些关键的事件。我们从左往右,从上往下看。可以看到这里我们有5个事件。当我们提交订单时,发生了一个事件,这个事件叫做“订单已创建”。当我们支付成功后,发生了“订单已支付”的事件,然后当快递小哥上门揽收了包裹后,发生了“物流单已创建”的事件,当客户签收后,发生了“物流单已确认收货”的事件,最后当客户点解收货时,发生了“订单已完成”的事件。这5个事件一般来说是按照这个时间顺序发生的。

电商场景事件风暴

我们接下来的讨论都是基于这个事件风暴的上下文。从这个事件风暴中,我们看到这里反复提到了两个概念,就是订单与物流单。

订单与物流单

那我们怎么去划分聚合呢?

如何划分聚合

接下来,我们进入By Experience的第一层次。我把它叫做感觉,第一个层次,凭经验,就是凭感觉。

这时有位架构师A说:

架构师A

按照他的说法,凭他的感觉,订单与物流单之间就会有两个聚合,一个订单聚合,一个物流单聚合,这是第一层次。

两个聚合

接下来是第二层次,我把它叫做规则。

这个时候,有另外一位架构师B,他说:

架构师B

他把经验总结提炼成了一个规则,这个规则就是根据比较两个概念的生命周期的长短来划分聚合。生命周期长的称为聚合。

按照他总结的规则,对之前的事件风暴进行分析,得出订单的生命周期确实是比物流单的生命周期要长,而且整个物流单的生命周期都被订单的生命周期涵盖,所以这里只有一个聚合,就是订单聚合,而物流单只是作为订单聚合内部的一个实体存在。

订单与物流单生命周期


一个聚合

这是第二个层次,规则。

好,接下来我们来到第三个层次-人,这是最玄乎的一个层次。

这个时候,有一位业务专家说话了,他说:

领域专家

按照他的意思,虽然订单的生命周期涵盖了物流单的生命周期,但是因为物流系统是外包的,客户拿着物流单号是可以直接跑到外部的物流系统查询物流状态的。如果按照第二层次的划分方法,物流单只是作为订单聚合内部的一个实体的话,显然不能支持这个业务场景。

这个时候又要把两者拆分成两个不同的聚合了。

两个聚合

那到这里我们的聚合划分之旅就结束了吗?感觉结果又回到了原地啊,跟第一个层次凭感觉一样啊?

我们说并不是结束。整个DDD的架构建模过程,是一个螺旋上升,螺旋前进的过程,这个过程的一头是协作,另一头是演进,良好无间的协作推进架构的持续不断地演进,使得我们的最优解不断逼近完美解。注意这里说的是逼近,而不是达到。因为完美解永远都达不到。

最优解向完美解逼近

经过这三个层次之后,到了反思的时候了。我们如何把控DDD建模或者是架构设计过程中的经验与非经验因素呢?

一次客户现场的对话

以上这句话来自一次真实的客户现场的对话,当时客户问我你能不能总结一些DDD的规则,到时候他们按照这些规则就可以自己实施DDD了, 我就帮他们总结了一些,包括前面的第二个层次里面提到的按照生命周期长短来划分聚合。但是最后我补上了这么一句话。

这句话里面的一端是经验,另一端是规则,就是把一些经验总结提炼成了让所有人都可以操作的规则。

这里的两端,表面上,一端是经验,另一端是规则。

规则与经验

实际上,背后蕴含着的是人和机器两种因素,规则一端对应的是机器,经验一端对应的人,而人代表的是一种不确定的因素,如果我们可以把所有的经验都总结成规则,那就不需要架构师了,完全可以让机器按照规则来把架构输出出来了。但这个是不可能的,要那样我们都失业了,怎么可能呢?我们永远无法完全去除掉人的因素,就像刚才的例子,你永远不会知道会不会有第四位,第五位,第六位领域专家跳出来说他脑子里面只有他自己知道的的东西。这是一种unknown-unknown的情况,只有被告知或观测了,才会坍缩。

机器与人

相反的是,我认为架构设计中的闪光点,最点睛的一笔,恰恰就是因为有人这种不确定型的因素存在。这里的机器和人,其实更深层次的意思是代表着你追求的究竟是一个技术品,还是一个艺术品。就像建筑学,构建能住人的房子是容易的,它只是一个技术品,构建富有美学涵义的建筑物是困难的,需要建筑师付出心血。软件系统架构设计也一样,如果完全通过机器根据规则推导输出出来的架构,顶多算是一个技术品,而糅合了人的经验,灵感,智慧等因素而得出的架构,才说得上是艺术品。

技术品与艺术品


保持对一个美的架构的追求,我想这是我们作为一名架构师存在的意义所在。

 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 195,783评论 5 462
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,360评论 2 373
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,942评论 0 325
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,507评论 1 267
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,324评论 5 358
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,299评论 1 273
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,685评论 3 386
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,358评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,652评论 1 293
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,704评论 2 312
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,465评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,318评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,711评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,991评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,265评论 1 251
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,661评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,864评论 2 335