抽象方法一般有两个分解decomposition和组合composition,这两种方法的方向正好相反,分解是将整体分解为部分,而组合是将部分组合成整体。
分解和组合经常结合在一起使用,实际就是拆了装,装了拆,如同玩玩具一样,只不过每一次拆装都是有具体依据。
分解组合实际是一种虚拟重建方法,将现实世界中的模型使用抽象符号分解为一个个基本元素,然后再使用“关系”将它们组合在一起形成一个稳定的结构,形成结构后一个系统就具备了初步的形态。生命正在孕育之中。
软件架构的4+1视角模型简介一文对软件架构划分了五种视角,这五种视角针对不同的人群用户,一个好的落地的软件架构应该同时满足不同的利益要求者。4+1视图有:逻辑视图 开发视图 处理视图 物理视图,最后+1是场景。
逻辑视图是业务逻辑的分析,将功能性需求分解为类图,这里主要使用了面向对象的分解方法,也就是将需求分解为一个个对象类型,对象类型是最小的元素,通常我们使用UML的类图来表达,为什么要使用对象类型来表达分解后的元素呢?因为所谓对象是有边界的一种封装,人以群分,物以类聚,分门别类进行封装可以认为也是一种组合。
因此,类型是我们分解与组合的基本依据,类型理论是非常抽象和复杂,但是如果有丰富的实践经验,见识过各种不同类型的代码和抽象封装,就像见过各种不同类型的人以后,对人性的了解更加深刻一样。
处理视图是根据性能和扩展性要求进行分类的视图,低延迟和高吞吐量是处理架构的终极目标。开发视图是根据系统模块耦合进行分类的视图。物理视图是面向系统工程师的分类视图,落地为一个个实际物理存在的设备和网络。
场景视图是将这四种视图组合在一起使用,从而最终实现业务用例,模拟物理世界的业务需求实现。
以上主要是软件中的分解和组合使用,其实这两种方法适合更广泛的思维方式,分解思维能够让人不断研究细节,比如西医治病采取的是分解思维,肝脏有病就解剖肝脏,直至分解到细胞;而中医是采取组合方法,肝脏有病寻找与其有关系的肾脏进行补养,中医依据的五行水木金火土代表一种关系,肝脏代表木,而肾脏是水,水生木,也就是水能够滋养植物,所以,中医才采取补肾的方式治肝。
由此可见,类型与关系是分解与组合面对的主要元素,一个大的事物分解为不同类型的小事物,相同类型的事物可以合并成一组类型,分解时尽量切断各种关系,除非是高聚合的组成关系,也就是缺一不可的关系,这样才能孤立事物,研究事物;而组合是拉关系,通过关系将不同事物组装在一起。如果反映到数据库建模上,就是先建数据表,再找外键关系。
典型比如几何学是对直线 三角形等孤立图形进行研究,实际生活中是没有直线和三角形这个事物,就是有也是融入了复杂环境之中,分解思维能够让人有的放矢,集中人类的有限智慧从上帝手里抢夺一些自然的秘密。
举例:一张桌子。分解思维的人看到后,研究其长宽高以及材质和形状等个体特性,而注重关系的组合思维的人看到后,环顾四周,关注这张桌子的环境以及与其他事物有时间或空间的关系。
中国人这种注重关系的思维起因还可从老子道德经的“无以为用”中发现:三十幅共一毂,当其无,有车之用。埏埴以为器,当其无,有器之用。凿户牖以为室,当其无,有室之用。故有之以为利,无之以为用。这段话意思是:三十根棍子做成的圆轱辘,只有忽视圆轱辘内部这种结构,从圆轱辘外部看到,才会发现它原来是可以做车的轮子这一用处。比如门窗,只有忽视其内部如何结构的构建,才会从外部想到用它在房间中。
所以,忽视个体内部结构,从外部关系组合才会发挥其用处,这是“无以为用”;而注重内部细节的“有”,这种分解方法无疑如同利器能有的放矢,因此这是“有以为利”,两者合并在一起就是“利用”。利用就是分解组合,中国古人的智慧还真是很厉害啊。
=====================================================
本微信静态数据存储由七牛云存储提供!七牛专为移动时代开发者提供数据安全托管、双向传输加速以及图片、音视频等数据处理的一站式服务。