一、柔性设计
项目能够随着开发工作的进行加速前进,不会由于自身的老化停滞不前;每一次设计都要让他人欣然接受、乐于使用且易于根据需求的变化做出修改。
intention-revealing interface (释意接口)
在命名方法和变量时要描述它们的效果和目的,而不要表露它们是通过何种方式达到目的的。这样调用者就不必理解内部细节。这些命名要与领域模型的统一语言保持一致,以便团队成员可以迅速推断出它们的意义。
side-effect-free function(无副作用的函数)
尽可能把程序的逻辑放到函数中,因为函数是只返回结果不产生明显副作用的操作。严格地把命令隔离到不返回领域信息费非常简单的操作中。当发现一个非常适合承担复杂逻辑职责的概念时,就可以把这个复杂逻辑移到值对象中,可以进一步控制副作用。
assertion(断言)
把固定规则,前置条件,后置条件清楚地表达出来,这样就可以主观预见使用一个操作或对象的后果。
conceptual contour(概念轮廓)
把操作,接口,类,聚合分解为内聚的单元,目标是得到一组逻辑上组合起来的简单接口,使那些无关选项不会分散我们的注意力。在需求不断提出的过程中,寻找那些能够解释变化趋势的底层概念轮廓,使它与领域中的某些概念相匹配。这是模型和领域相吻合的信号。
释意接口清楚的表明了类,函数,方法的用途,把对象表示为有意义的单元;无副作用的函数和断言可以让我们在前置条件已知的情况下,更准确的预测结果,使我们的封装和抽象更加安全;是我们安全地使用这些单元,进行复杂的组合;概念轮廓的出现使模型的各个部分变得更加稳定,也使得这些单元更直观,更易于使用和组合。