9.1.4
    提到一本书 <分析模式>

    10.1

    但是,客户开发人员要想有效地使用对象,必须知道对象的一些信息,如果接口没有告诉开发人员这些信息,那么他就必须深入研究对象的内部机制,以便理解细节。阅读客户代码的人也需要做同样的事情。这样就失去了封装的大部分价值。
    我们需要避免出现“认识过载”的问题。如果客户开发人员必须总是思考组件工作方式的大量细节,那么就无暇理清思路来解决客户设计的复杂性。
    让一个人同时扮演两种角色(既开发代码,也使用他自己的代码)的时候也是如此,因为他即使不必去了解那些细节,也不可能一次就把所有的因素都考虑全面。

    10.3

    如果操作的副作用仅仅是由它们的实现隐式定义的,那么在一个具有大量相互调用关系的系统中,起因和结果会变得一团糟。理解程序的唯一方式就是沿着分支路径来跟踪程序的执行。封装完全失去了价值。跟踪具体的执行也使抽象失去了意义。

    如果把模型或设计的所有元素都放在一个整体的大结构中,那么它们的功能就会发生重复。
    外部接口无法全部给出客户可能关心的信息。由于不同的概念被混合在一起,它们的意义变得很难理解。
    而另一方面,把类和方法分解开也是毫无意义的,这会使客户更复杂,迫使客户对象去理解各个小部分是如何组合在一起的。更糟的是,有的概念可能会完全丢失。轴原子的一半并不是轴。
    而且,粒度的大小并不是唯一要考虑的问题,我们还要考虑粒度是在哪种场合下使用的。