领域驱动设计-柔性设计

柔性设计

Intention Revealing Interfaces

描述类和方法时,要让其可以自己揭示它们的效果和目的.
这个很好理解, 让接口具有自我描述性,不要让使用方通过看实现来了解接口的使用方法.

Side-Effect-Free Function

我们先定义2个概念:

  • 函数: 不产生副作用的操作, 返回值代表了它的产出.可以被调用多次,每次都返回相同的值.
  • 命令: 会产生副作用, 会导致对象状态变更.
    应该怎么应用?
    首先,使用函数,就没有副作用. 其次,把一些复杂的逻辑放到ValueObject中,而对状态的改变,既对entity中属性的改变,尽量做得比较直接,不要把在entity的方法中放入大量的逻辑.
    该有的复杂逻辑是少不了额,我们只是把它们放到sid-effect-free的函数中.这种'后置条件'

Assertions

实体中总会遗留一些有副作用的命令, 在这种情况下,使用断言(assertion)来明确的把副作用表示出来.
如果编程语言不支持assertion,就把它编写成单元测试.

Conceptual Contours

直接翻译过来就是概念轮廓.这是个关于拆分粒度的权衡.
如果把所有的元素放到一个大的整体里面, 大量的概念被混在一起, 就会变得很难理解.
如果拆分的太细, 会迫使客户理解各部分是怎样组合的, 更糟的是有些概念会丢失, 比方说在一个细的粒度下,我们能看到车胎和车座,但是无法看到自行车这个整体.
首先我们要认可领域是可以被建模的, 有一个概念上的轮廓.
就像素描一样,现实中的实物,就是我们的概念轮廓, 我们会不断的修改, 以达到和实物逼近的画面. 概念轮廓(conceptual contours)的得来,也是这样一个过程, 我们在不断的重构, 使我们的模型不断的逼近领域. 当连续的重构只是做出的一些局部修改的时候, 这就是模型与领域相吻合的信号. 如果遇到一个需求, 需要大幅的修改模型才能满足, 这说明模型和领域之间还有很大差距, 我们对领域的理解也有偏差.

Standalone Class

互相依赖使得模型和设计变得难以理解和维护.
类的成员变量是依赖, 方法的参数和返回值也是依赖. 如果要尝试去搞懂一个类, 它的所有依赖也要被牵扯进来.
Module的目的是为了限制依赖, 当我们识别出一个高度内聚的子领域, 并把它放入一个module中, 它也随之与系统的其他部分解除了联系.
但是Module内部也存在依赖. 如何去除依赖? 我们应该对每个依赖提出质疑, 直到证实它确实表示这个对象的基本概念. 我们把所有的无关概念提取到对象之外的时候, 类就变成了完全孤立的了, 使得我们可以单独的研究和理解它.
低耦合是减少概念过载的基本方法, 孤立的类(standalone class)是低耦合的极致.

Closure of Operations

什么是闭合(closure)?
closure这个概念来源于数学. 简单来说就是某种运算,如果只在某个概念集合内进行, 就是闭合的,比方说加法运算就是实数集中的闭合运算.

闭合的好处?
闭合的操作极大的简化了对操作的理解,同时,闭合操作的链接或组合也很容易理解.

怎么做?

  • 让参数和返回值相同,这个函数就是闭合的.
  • 如果函数是类方法, 并且用到了类中的状态, 则参数和返回值都应该是这个类.

Declarative Design

Angles of Attack

切入问题的角度, 既具体实施时的一些技巧.

  • 分割子领域
  • 尽可能利用已有的领域模型, 其中有些已经被精华和提炼好久 .例如支付领域.

参考:

领域驱动设计:软件核心复杂性应对之道

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

推荐阅读更多精彩内容