分割原理的具体描述如下:
1)把一个物体分成相互独立的几个部分;
2)把一个物体分成容易组装和拆卸的部分;
3)提高系统的可分性,以实现系统的改造。
分割原理要表达的其实就是我们平常所说的分而治之的策略,这是我们解决问题的一种最简单朴素的方法,应用非常广泛。
分割原理好处:
A)降低系统的规模和粒度,增加系统的可解析
降低系统规模和粒度的目的当然可以使得系统求解更加容易,对于制造业来说,可以使得制造更加容易,更加专业。在软件系统中的大文件分割成小文件,大系统分割成小系统,可以使得系统的实现变得更加简单和容易。同时,如果系统按功能进行分割,可以使得子系统各负其责,子系统的职责更加单一。
B)增加系统的灵活性,弹性和可维护性:
分割的另一个好处就是脱耦,通过脱偶可以增加系统的灵活性,弹性和可维护性。灵活性和弹性大家可以很容易理解,可维护性表达的是系统如果出问题,我们只要找到出问题的部分,进行替换就可以。现在制造业的组件化和软件设计的模块化(组件化)都是利用了这种思想。比如网络的分层,软件系统的多层架构。
C ) 使得社会化生产,流水化作业成为可能
这个好处是显而易见的。
那什么时候可以用这个原理呢?下面是一些典型的场景:
1)如果我们需要在一个现有的系统(或者物体)上的增加功能或职责,而现有系统的功能比较笼统的情况下;
典型的例子是垃圾箱,垃圾箱的功能是回收垃圾,但我们现在需要对垃圾的回收进行分类,这就增加了垃圾箱的职责,不仅要回收垃圾,还要分类,一个比较简单的办法就是将垃圾箱分成几个相对独立的部分(可回收垃圾,不可回收垃圾,其它垃圾),这也是原理中第一种情况。对于软件系统中,对数据的访问分成文件数据的访问和数据库数据的访问也属于此类。当然,如果增加的职责比较复杂,有时候简单的分割并不容易解决,反而会增加系统的复杂性和成本。
2)如果系统过于笨重,不便于移动或运输
这个主要是针对实物型的系统,比如可拆卸衣柜,整体衣柜大而笨重,不便于运输和搬动,通过分割原理变成可拆卸的衣柜后,就使得移动和运输更加容易。
3)如果系统比较复杂,整体上不便于制造。
这种情况下就需要分割成比较容易制造的子系统(组件),然后通过组装来完成。这种例子就非常多了。其实软件系统的构造者(Builder)模式就是这种思想;
。。。。。。
分割原理的副作用:
1)可能会增加系统的复杂性;
分割后,为了使各个组件还能整体工作,就需要协调各个组件,增加额外的设计,使得系统的复杂性增加,特别是分割不合理或者过度分割的情况下,系统的复杂性会增加很快,所以一定要把握住分割的度。
2)降低了系统的鲁棒性(健壮性);
这个比较容易理解,因为分割后需要增加连接组件,会使得系统的健壮性降低。
3)会带来额外的设计
系统进行分割后,为了将各个子系统连接成一个整体,就需要增加连接组件,比如一节棍变成双节棍后的链接链条。同时要让各个部分共同完成系统功能,还需要增加协调功能来协调各个部分的工作。
分割的方法:
在制造业中系统的分割一般是按子功能(如:动力装置,传输装置,控制装置,执行装置,转换装置,传感装置等)来进行,在软件系统设计中,也可以按子功能来分割,可以沿着功能的纵向和横向来进行,比如SOA就是按横向来进行,而分层就是沿着纵向来分割。