张逸说

出口成张,逸派胡言

0%

都说“过早进行性能优化是万恶之源”,我宁肯相信这是为了“矫枉过正”而出此惊人之语,更何况,现在的IT时代已与Donald Knuth的时代已有很大差异了。重点还是在于“过早”这个词,之所以Knuth告诫我们不要过早进行性能优化,原因在于:

  • 判断性能是否存在问题,不能太早
  • 太早做性能优化,有可能并没有弄清楚性能瓶颈在哪里

图为Donald Knuth在斯坦福大学计算机科学William Gates大楼的办公室

最近,我的团队成员正在着力于提高实时流处理任务的性能。由于客户为我们的测试环境仅提供了极度可怜的集群资源,我们需要在“螺蛳壳里做道场”,死扣性能,尽可能在方案与实现上将性能提升到极致。(顺带说,在测试时,不要奢侈地提供大量资源,反倒有可能尽早发现性能问题,从而让团队想办法解决之。)

阅读全文 »

我的书《解构领域驱动设计》即将由人民邮电出版社异步社区出版,目前已经可以在出版社的官网预定,很快就能够在电商平台上架开售。历时近四年的写作委实不易,当然,也离不开各位朋友的支持与帮助。正如我在本书前言中提到的“感谢京东周吉鑫、AWS高翊凯(Kim Kao)、腾讯王立与技术专家于君泽(花名“右军”)诸兄的抬爱,他们不仅拨冗为我的著作作序,也给了我许多好的建议与指点,提升了本书的整体质量。”

为此,在这里我抢先发布这些朋友为本书写的推荐序,以飨读者。

阅读全文 »

四年了,《解构领域驱动设计》终于可以在异步社区的官方网站上预购了!这意味着,我的著作终于出版了!有没有普天同庆的赶脚?总之,当我收到这一消息后,长长地吁了一口气……终于,终于,四年了,真不容易啊!

许多次,我在给别人介绍这本著作时,总有人问我哪里可以买到,而我则尴尬地回答:嗯,这个,这个,还没有出版呢。许多次,读者圈的朋友在问这本书多久出版时,我从2020年承诺年底出版,然后推迟到4月,然后推迟到6月,最后推迟到7月,进度的delay已经让人产生抱怨了!而在许多年前,我总是说我的第一本书《软件设计精要与模式》,言外之意,我还有第二本书,可是自从2007年出版我的第一本书,到2009年出版该书的第二版之后,我的第二本书终于在14年后诞生了。

一些信息可以侧面证明本书写作的不容易。

阅读全文 »

即便采用面向对象建模范式,领域驱动设计的建模仍与面向对象建模存在较大差异,原因在于领域驱动设计引入了限界上下文(Bounded Context)聚合(Aggregate),使得建模的风景变得迥然不同。二者为领域模型引入了边界的约束,使得建模者不能随心所欲地建模,亦改变了模型的面貌。

在我的《解构领域驱动设计》一书中,提炼了领域驱动设计之精髓,在于对边界的控制。其中,限界上下文与聚合是解空间边界控制中最为重要的两个要素。我们构建的领域模型必然位于限界上下文中,构成领域模型中的主力军——实体和值对象——又必然位于聚合的边界内:

阅读全文 »

甄别实体与值对象非常重要,正确与否会直接影响聚合的设计。

聚合是边界

在DDD中,聚合是实体与值对象的边界。一个聚合对外代表了一个完整的领域概念,遵循面向对象设计的基本原则,聚合内部往往由多个细小的高内聚领域概念组成。聚合内部的领域模型形成了一棵树,树的根必须是实体,可以称之为是聚合根(Aggregate Root),当然,也可以称之为根实体(Root Entity),它是聚合的唯一入口或出口。例如订单聚合定义了Order根实体,它就是订单聚合的唯一代言人。

在一个限界上下文的所有领域模型(实体和值对象)中,按照关系的强弱与概念的完整性,将其划分为多个聚合,就好像草原部落由一个个蒙古包构成了松散的聚居社群一般。

阅读全文 »