张逸说

出口成张,逸派胡言

0%

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

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

阅读全文 »

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

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

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

阅读全文 »

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

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

阅读全文 »

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

聚合是边界

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

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

阅读全文 »

通过《多维度规划业务架构》,我们获得了由业务领域-业务组件-业务服务三个层次组成的业务架构。虽然是架构,但其本质仍然属于问题空间,其目的在于真实地探索问题空间,了解我们要解决什么样的问题。我们用到“分解”的方法,并非在解决问题,而是希望通过横向分层与纵向切分让问题空间变得更小,降低业务复杂度罢了。

这种分解层次体现为:

  • 业务领域是对目标系统之系统范围进行划分,划分依据为价值高低
  • 业务组件是对业务领域的划分,划分依据在于业务相关性
  • 业务服务是对业务组件的划分,划分依据在于领域模型的知识语境

领域驱动进行的业务分解,既是对问题空间的探索,又自然地暗合确定解决方案的思路。由于有清晰的边界存在,这一做法并未混淆问题空间与解空间,却天然地搭建了一种映射方法,使得我们能够以较小成本将业务架构映射为IT架构中的应用架构。

阅读全文 »