在第一章中已经介绍过,将应用程序分割成许多小块(即:组件),在使用时可以随意调换其中一个或多个组件,以实现组件的快速淘汰和重组,从而快速满足客户的特殊需求或新需求。 这也就是说将应用程序分为多个Part,再组合成一个Whole。
要想真正实现快速淘汰和重组的效果,Part就不能随意划分。Part的划分要讲究“有机次序”。只有“分”得好,才能“合”得快,合得妙。 所以,下面专门讨论如何划分Part。
我们可以分析Whole是否面临如下情况,如果有,那我们就可以把这部分划分出来,作为一个Part:
1 希望组合出多样化的Whole
2 希望分散开发生产,加快Whole的组合速度
3 希望组件提前开发,缩短Whole的生产时间
4 希望可外购现成组件,以降低成本
5 希望专注做小组件,并大量生产
我们还可以从以下角度来洞悉“稳定”的部分和“变化”的部分,将“稳定”和“变化”划分开,成为不同的Part:
1 根据客户而分: 比如:大部分人喜欢加糖咖啡,但正在减肥的女士则喜欢无糖或低糖咖啡。所以咖啡是稳定的,糖是变化的。因此将糖和咖啡划分开。
2 根据时间而分: 比如:汽车的车体在设计时就已固定,但汽车的颜色是在顾客购买时才确定的。因此将车体生产和车身上色划分开。
常见的三种组合关系分类
分类举例符号组合/部分房子和门房子和窗户汽车和引擎容器/内容汽车和司机巴士和乘客集合/成员雁群和大雁东南亚总行程和香港观光行程Odell提出的组合关系分类
担任过美国OMG主席的James Odell提出了一套关系分类方法,他根据3项特性将组合关系分为6种。
其中,3项特性分别是:配置、同质性、不变性。
配置:“部分”与“整体”有特定的功能和结构关系
同质性:“部分”与“整体”是一种东西
不变性:“部分”难以从“整体”中抽离出来
6种组合关系如下表:
说明:
1.我没有搞明白“配置”这项特性到底如何理解,所以下表中没法把对“配置”的解释写出来。
2.我个人认为这种分类方法过于繁琐,不如前一种方法简单明了。
3.我个人认为这种分类方法的3个特性中,不变性最为重要,因为是否具备不变性决定了使用哪种符号:不变使用composition,可变使用aggregation。
分类举例配置同质性不变性符号组件/整体对象的组合CPU和电脑风扇和电脑非同质:CPU、风扇和电脑不是一种东西可变:CPU、风扇可以冲电脑中取出来材料/对象的组合油和红龟粿糖和红龟粿糯米和红龟粿非同质:油、糖、糯米和红龟粿不是一种东西不变:油、糖、糯米一旦制成红龟粿就没法再取出来了切割部分/对象的组合一块饼干和一盒饼干同质:一块饼干和一盒饼干都是饼干可变:可以从一盒饼干中拿出一块饼干地方/地区组合东南亚总行程和香港观光行程同质:东南亚总行程和香港观光行程都是行程可变:可以单独进行香港观光行程,从另一个角度看也可以从东南亚总行程中去掉香港观光行程,这并不影响东南亚总行程的存在成员/聚集组合(同前一种分类法中的容器/内容)会员与俱乐部可变:会员可退出俱乐部,这并不影响俱乐部的存在成员/合伙组合(同成员/聚集组合的区别就在于不变性)父母亲一方和双亲家庭不变:缺少父母亲任一方就不再是双亲家庭了