文档章节

《领域驱动设计》读书笔记(7)——柔性设计

bitbone
 bitbone
发布于 2017/06/12 10:43
字数 1451
阅读 38
收藏 0
ddd
这一部分主要谈的是一些设计和实现领域模型上的一些具体技巧。这些技巧,就算不用领域驱动设计,也一样能采用的,而且可以提高软件的质量。

释意接口

就是让软件的接口包括类名,方法名,参数名等,能表达出这个接口的意图,达到的效果。 如果开发人员必须考虑组件的实现才能使用它,那么封装就失去了价值了。如果某个人(除了组件的原作者)必须根据实现来推测一个对象或操作的意图,那么他推测出来的很可能只是那个对象或操作的偶然完成的。如果他猜错了意图,那么代码可能会在一段时间内正常工作,但是设计的概念基础已经被破坏了,两个开发人员的工作变得有些驴唇不对马嘴。 类和操作的名称应该表达出其效果和目的,同时又不涉及它们为了达到承诺而使用的手段,这样才能避免客户开发人员需要去理解内部实现。名字必须与通用语言一致,这样小组成员才能迅速理解它们的含义。在创建类和操作之前先编写测试代码,这样能促使您从客户开发人员的角度来考虑问题。

无副作用函数

一个函数如果在执行过程中不会改变除临时变量之外其它对象的状态,就可以把这个函数看成无副作用函数。无副作函数可以让使用者放心的使用,不用担心调用之后会引起怎样的不可预知的效果。 多条规则的相互作用或计算的组合将使预测变得极度困难。为了预测调用一个操作的结果,开发人员必须理解操作本身,及操作调用的所有其他操作的实现。如果开发人员被迫去理解那些内部实现,任何接口抽象都不会有多大用处了。如果不能安全的对抽象结果进行预测,开发人员就必须限制“组合爆炸”,从而为系统行为所能够达到的复杂性人为地设置了一个上限。 尽可能的将程序逻辑放到函数中,以及只返回结果而不产生可观测副作用操作中。将命令(导致可观测状态产生改变的方法)严格地分离为非常简单的、不返回任何领域信息的操作。如果概念与职责明显匹配的话,我们还可以将复杂逻辑移入值对象,以进一步减少副作用。

断言

断言,其实就是用程序来声明程序在运行过程中应当满足的约束条件。如果语言支持,可以在开发过程中就给函数加上断言,以声明函数的前置条件和后置条件,既可以帮助我们找到故障发生点,又可以帮助代码阅读者理解设计意图。单元测试也是断言的一种方式,可以显式地说明程序单元执行后的效果。

概念轮廓

领域对外提供的接口,如果粒度太细,则客户端必须了解领域细节才会使用,而且会导致客户端的代码重复,如果粒度太粗,则对于客户端来说领域不灵活,领域层也可能出现太多功能在一个对象之上。因此要通过重构,寻找最合适的粒度来表达领域。要足够细,细到能贴合领域的稳定面,要足够粗,粗到客户端能方便使用,能了解领域的含义。 比如,假如“添加两个对象”在领域中,就是一个完整的操作,那么对应的模型中就不应该把添加两个对象分步来表达。

孤立类

即使是在模型块内部,设计的理解难度也会随着依赖的加入而急剧上升。这会进一步加重大脑过载问题,进而限制设计人员能够处理的复杂度。如果存在隐含概念,那么它造成的大脑负荷比显式的引用还要大。 低关联是对象设计的基本原则,只要有可能就应该这样做。从图中把所有其它概念全部排除出去,只剩下一个完全自包含的类,这样我们就能单独观察和理解它了。每个这种自包含的类都明显地降低了理解一个模块的难度。

操作封闭

正如对整数的加减运算只会产生整数一样,如果模型中操作的返回值和参数是同一种类型的话,就可以不引入新的概念而描述这个操作。 在适当情况下,把操作的返回值与其变元定义成相同的类型。如果在计算中要用到实现者的状态,那么实现者实际上就是操作的一个变元,即操作的变元和返回值应该与实现者是同一种类型。这样的操作对于这种类型的实例集合就是封闭的。封闭的操作为我们提供了一个高层接口,同时又无需引入任何对其它概念的依赖。

声明性设计

这个就是说努力提炼自己的DSL了。

© 著作权归作者所有

bitbone
粉丝 3
博文 130
码字总数 101724
作品 0
上海
后端工程师
私信 提问
UNIX网络编程卷2进程间通信读书笔记汇总

UNIX网络编程卷2进程间通信读书笔记(一)—概述 http://blog.chinaunix.net/u/22935/article_52711_2.html UNIX网络编程卷2进程间通信读书笔记(二)—管道 (1) http://blog.chinaunix.ne...

长平狐
2012/09/03
230
0
阅读的养成

阅读的养成 Wilson's Blog2016-08-2618 阅读 最近在网上看到一位美国畅销书作家最近在接受中国媒体采访时说“读书是非常孤独的一种行为”。 我觉得就是因为内心孤独,所以才想读书,这或许是...

Wilson's Blog
2016/08/26
0
0
这家估值超30亿美金独角兽今年第三次参加CES 将带来多款新品

     全球最大的消费类电子展——美国国际消费电子展(CES)将于2018年1月9日至12日在美国拉斯维加斯举办,国内独角兽公司柔宇科技将第三次参展。据悉,柔宇将携荣获CES 2018创新大奖的全球...

人工智能趣闻
2018/01/04
0
0
我的 2017 年度盘点

一、Core Topics Learning based on full English. Operating System Kernel & Dynamic tracking & Go Programming Language. Lincoln Foundation & Absolutism Research. 二、年度成果 2.1 ......

RiboseYim
2017/12/30
0
0
这家估值超30亿美金独角兽今年第三次参加CES 将带来多款新品

     全球最大的消费类电子展——美国国际消费电子展(CES)将于2018年1月9日至12日在美国拉斯维加斯举办,国内独角兽公司柔宇科技将第三次参展。据悉,柔宇将携荣获CES 2018创新大奖的全球...

人工智能那点事
2018/01/04
0
0

没有更多内容

加载失败,请刷新页面

加载更多

OpenStack 简介和几种安装方式总结

OpenStack :是一个由NASA和Rackspace合作研发并发起的,以Apache许可证授权的自由软件和开放源代码项目。项目目标是提供实施简单、可大规模扩展、丰富、标准统一的云计算管理平台。OpenSta...

小海bug
10分钟前
1
0
DDD(五)

1、引言 之前学习了解了DDD中实体这一概念,那么接下来需要了解的就是值对象、唯一标识。值对象,值就是数字1、2、3,字符串“1”,“2”,“3”,值时对象的特征,对象是一个事物的具体描述...

MrYuZixian
今天
6
0
数据库中间件MyCat

什么是MyCat? 查看官网的介绍是这样说的 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务、ACID、可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵...

沉浮_
今天
4
0
解决Mac下VSCode打开zsh乱码

1.乱码问题 iTerm2终端使用Zsh,并且配置Zsh主题,该主题主题需要安装字体来支持箭头效果,在iTerm2中设置这个字体,但是VSCode里这个箭头还是显示乱码。 iTerm2展示如下: VSCode展示如下: 2...

HelloDeveloper
今天
6
0
常用物流快递单号查询接口种类及对接方法

目前快递查询接口有两种方式可以对接,一是和顺丰、圆通、中通、天天、韵达、德邦这些快递公司一一对接接口,二是和快递鸟这样第三方集成接口一次性对接多家常用快递。第一种耗费时间长,但是...

程序的小猿
今天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部