领域驱动设计-柔性设计

软件的最终目的是为客户服务,但是首先要服务于研发人员,一个设计的好的模型一定是是健壮,且易于扩展的。我们称这种设计为柔性设计.

首先、程序员看到接口就应该明白接口是做什么用的,没有任何的副作用。其次、设计涉及的模型要健壮,利于扩展增加功能,而不能每次修改就面临推倒重来

要求

  • INTENTION-REVEALING INTERFACES:接口、Entity、方法命名清晰无歧义,且符合整个模型的通用术语。避免调用者去深究实现含义。
  • SIDE-EFFECT-FREE FUNCTION:引起Entity状态改变的(需改操作)逻辑抽象出来放到ValueObject中去【service】中。否则调用方法后开发人员无法预知这个Entity的状态变化。
  • ASSERTION:要通过断言告知调用者所有的关键分支,如果java等不支持断言需要提供完备的unit test。
  • CONCEPTUALCONTOUR:确定模型的底层轮廓,尽量避免底层轮廓的修改(如果底层轮廓经常修改,说明模型不够健壮)
  • STANDALONE CLASS:减少Entity之间的耦合。【剔除无关的属性和功能】
  • CLOSER FOR OPERTATION:闭合操作,加强整个系统的内聚。【一个模型只做自己相关的事情】