在软件设计中分层应该是越少越好, 过度分解一般都是有害的.
虽然说复杂的事物分解之后一般可以得到一些较简单的组成成分, 但这并不是必然有用的. 分析学成功的关键在于分解之后的组分能够出现大量重叠的情况,
参见软件中的分析学 http://canonical.blogdriver.com/canonical/555330.html
当分解到一定程度之后我们未必能够发现可以重用的部分. 而且即使分解后系统中所有的基元都是简单的, 也并不意味着整个系统就是简单的. 生物遗传密码由四种碱基构成, 但是我们理解了ATGC决不意味着我们理解了生命. 在理论上存在一种连接主义, 认为真正的复杂性蕴含在元素之间的关系之中而不在于元素自身的复杂性. 例如神经网络的研究中可调的参数多半是神经元之间的连接权重,而不是神经元本身的模型参数.
在理想中, 我们希望系统的功能划分能够泾渭分明, 一个类负责一个独立的功能实现或者一个功能侧面(aspect). 但是这只是一种乌托邦式的理想. 在物理的世界中, 我们未必能够为每一个我们思维中独立的概念找到一个稳定的物质载体. 就像是水中的漩涡, 看上去它也有固定的形状, 一定的稳定存在时间, 但是你无法说是哪些水分子参与了漩涡的构成, 实际上波的传播掠过了整个水面. 同样, 在软件中功能的归属和聚合很多时候并不是那么稳定的.
当分解到一定程度之后我们未必能够发现可以重用的部分. 而且即使分解后系统中所有的基元都是简单的, 也并不意味着整个系统就是简单的. 生物遗传密码由四种碱基构成, 但是我们理解了ATGC决不意味着我们理解了生命. 在理论上存在一种连接主义, 认为真正的复杂性蕴含在元素之间的关系之中而不在于元素自身的复杂性. 例如神经网络的研究中可调的参数多半是神经元之间的连接权重,而不是神经元本身的模型参数.
在理想中, 我们希望系统的功能划分能够泾渭分明, 一个类负责一个独立的功能实现或者一个功能侧面(aspect). 但是这只是一种乌托邦式的理想. 在物理的世界中, 我们未必能够为每一个我们思维中独立的概念找到一个稳定的物质载体. 就像是水中的漩涡, 看上去它也有固定的形状, 一定的稳定存在时间, 但是你无法说是哪些水分子参与了漩涡的构成, 实际上波的传播掠过了整个水面. 同样, 在软件中功能的归属和聚合很多时候并不是那么稳定的.