8 领域驱动设计 柔性设计

哎,不想示例了,凑合着看吧
使用柔性设计可以减少我们系统的耦合度

释意接口

类名要表达出对象

对属性方法不要使用缩写

尽量表达出接口的用途,而不表名以何种方式

无副作用函数

返回结果而不产生副作用的操作称为函数

let arr = [1, 2, 3, 4]

// filter 是无副作用函数
let newArr = arr.filter(e=>e > 2);

// push 不是无副作用函数
arr.push(5);

如果一个操作既有读又有写,那么应该重构为两个函数,读写分离

注:从上述2条规则我们可以看出,无副作用函数即为读函数

值对象的操作均为函数,应为值对象不能改变,想改变一个值对象,只有替换,如果值对象想改变自身属性,则应该在函数中返回一个新的值对象,然后调用者替换掉这个值对象,基于上述方法,我们可以将一些复杂的概念封装为值对象,如下Color便是一个值对象

// 将油桶颜色混合
paint.Color = Color.MixedWith(otherPaint.Color)

概念轮廓

在连续的重构中,对象的概念应该越来越清晰,如果在一次重构中,对象的概念又变的模糊起来,那么应该思考是否重构错误

独立的类

提取一个概念会增加系统的复杂性(了解一个系统,就必须先了解这个概念),隐式概念(在建模中提到的概念,但在模型中没有表现出来)不提取出来,同样也会增加系统复杂性

如果提取的概念是是一个独立的类(不依赖于其他类),会让系统变得更清晰,增加的复杂性也是很少(理解一个独立的类是秒秒中的事情)

如果几个类互相依赖,那么我们是否可以将依赖的部分提取为一个独立的类,让这几个类依赖于独立的类

闭合操作

执行一个类的操作,传入的参数类型与当前类类型相同,返回与当前类类型相同的类型

闭合操作多用于值对象,当执行值对象的操作时,返回一个新的值对象

半个闭合操作:
传入的参数类型与当前类类型不同或返回的类型与当前类类型不同
半个闭合操作同样也具有闭合操作的优点

如我们所熟悉的集合类的过滤函数等均属于闭合操作

注:闭合操作属于无副作用函数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值