《领域驱动设计-软件核心复杂性应对之道》读后感

全书共分为3个部分

第一部分 基础

讲构成DDD的基础概念元素,以及如何在建模过程中使用这些概念.
业务模型由对象对象关系构成了一张复杂的对象图,称之为业务模型.主要讲了如何处理对象关系;对象包含哪些类型(实体,值对象,服务,工厂,仓库);对象图如何划分(聚合,模块).

  • 关联
    对象之间的关联,在对象图中用线表示,代表某种业务关系,如:属于,拥有,包含等等.
    访问对象可以有两种方式,一种是利用对象之间的关联关系,进行遍历访问,另一种则是通过Repository进行全局访问.
    为了简化对象图中的复杂关联关系,通常进行以下操作:
    (1)规定一个遍历方向,使无向边变为有向边
    (2)添加一个限定符,以便减少多重关联.
    举例:
    一个国家可以有多位总统,表示为: 国家 --> List<总统>
    但是如果考虑一段时间内一个国家只有一位总统,那么以时间段作为限定符,可以将一对多关系简化为约束的一对一关系,表示为: 国家 --> Map<时间段,总统>
    (3)消除不必要的关联,删除掉对解决业务问题无关的边.
  • 实体
    实体具有唯一标识,随着时间推移,其生命周期内状态(或叫属性)会连续变化,我们需要根据标识,来跟踪对象状态的变化,这种对象叫做实体.
    在实体设计时,定义标识是关键步骤.
    在建模时通常定义一个通用接口Entity,让实体类显示实现接口,便于对象分类.
  • 值对象
    值对象没有概念上的唯一标识,它们用于描述某种特征.如:Color类用于描述颜色.
    值对象可以引用实体,实体也可以引用值对象.
    值对象一般不可变的,这里的不可变指的是值对象内部的引用关系不可变.
    如:一个值对象引用一个实体,这种引用关系不可变,但实体内部状态可以改变.
    值对象不可变的特性,可以方便其被其他对象共享,并确保引用传递的安全性.
    值对象内部属性变更,通常通过原型模式创建新对象来完成.
  • 服务
    业务领域中有一些操作,不适合归属于任何对象,因此单独归属为Service.
    它们往往以活动命名,是动词而不是名词,并带有Manager后缀.
    服务对象无状态.
  • 工厂
    如果对象创建也是一个复杂的过程,应该让Factory承担这个复杂的装配过程.
  • 仓库
    就是解决从存储介质中重建对象的,为业务提供实体全局访问的能力.
    与工厂的区别是,工厂解决的是新建的问题,仓库解决的是存储,检索和重建的问题.
  • 聚合
    前文提到对象图是一张巨大且复杂的网络图,这其中某些对象之间需要满足一些固定的业务规则限制,如:退款交易总金额不能超过原支付金额;货物总重不能超过运输船容量;等等.聚合就是用来识别和划定一致性范围的.
    聚合指的是具有一致性规则约束的一组对象的集合,它本质上是一致性规则约束的范围边界.
    每个聚合都有一个实体作为根对象,外部只能通过聚合根访问或操作聚合边界内部的对象,而无法直接访问.
    聚合内对象也可以关联其他聚合的根对象.
    聚合内部的一致性约束和聚合间的关联,最终映射到事务上,表现为事务的嵌套.
    聚合如果想要通过编码体现的话,通常是通过分包的方式,把聚合内对象分到一个包中.
  • 模块(domain与其他层的划分,domain内部划分)
    模块也是对象图的划分方式,核心解决的是认知超载的问题,使我们可以对业务问题进行聚焦.
    上文提到,聚合可以通过模块划分的方式,在代码中具体体现.
    当然,多个内聚的聚合也可以整合为更大的父模块.
    再进一步,所有领域对象再整合为更大的父父模块domain,与application,infrastructure并列构成整个应用,形成了分层架构.
    总体如下:
application
domain
    |-- aggregate
        |-- entity
        |-- value object
infrastructure

第二部分 保持重构

这部分核心传递了一个思想,就是要敢于重构,根据自己对业务不断的认知迭代,去精化业务模型.还讲述了如何通过柔性设计来让模型易于被修改.
这里面强调的是模型的表达,和对象的设计两个方面.
模型表达,让后人易于理解,敢于修改.
对象设计,让修改变的容易,且对现状的冲击小.

第三部分 战略设计(限界上下文,精炼,大型结构)

这部分更多解决的是企业级业务模型面临的问题.
所谓企业级,特点是业务概念多而复杂,组织架构划分也可能导致不同团队业务模型不统一,对系统集成和业务认知都存在阻碍作用.
通过定义限界上下文,把企业级业务模型问题转化为限界上下文之间的集成问题.
分别介绍了共享内核,客户/供应商模式,追随者模式,防腐层模式,各行其道模式等几种不同的集成方式.
还介绍了如何通过精炼,产生企业级模型的高度概览视角.
最后,是如何组织大型结构,以及如何表达大型结构.

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

推荐阅读更多精彩内容