第七章 类的切片
先解释下标题的含义。切片就是把一个东西分割,如果你熟悉数据库切片,那么我说的类的切片也是这个道理。简单的说就是将一个很庞大的类,进行简化。切片的方法有
- 提取基类或者接口
- 将一些函数提取成处理类。
- 使用partial(C#分部(类型))将代码页拆分多部分
一个代码类,如果超过500行,那么找一个函数就开始麻烦了。有些同学写过超过2000行的,那等于航母呀。(PS,我还真有超过2000行的代码)。如果过于庞大的代码页,那么就可以考虑上面的切片方法。
1)提取基类或者接口
这种方法不影响外部函数的调用,调用此类的代码不需要修改。如果两个相关的类存在相关性,那么提取基类,也可以更加方便的维护代码的一致性。
2)将一些函数提取成处理类
这个方法其实在设计模式中讲了很多,比如工厂模式,
模版模式,
组合模式等。举个简单的例子,飞是鸟的特有属性,但是不同的动物不同的飞行方式,比如鸽子的啪啪啪的飞和鹰的滑翔飞。你可以使用一个抽象函数来让不同的对象实现自己的飞行方式。
如果把飞做成抽象类,那么就定义一个Fly的类,它来统筹常见的飞行方式。这样鸽子的啪啪啪的飞就可以用这个Fly类的啪啪啪飞函数来实现,鹰的滑翔飞用Fly类的滑翔飞来实现。
这种方法对那些数据计算尤其有用,因为数学是物体运动的基础,都满足什么物理第一定律之类的。如下图,NodeInfo和PipeInfo的数值计算都在Calculator这个组里面。从而使得PipeInfo和NodeInfo这两个类差不多只剩下成员属性了,非常干净。
也可以参考MVC的设计方式,将界面展示和控制分开。
一个设计窗口如果存在多个功能点,那么将每个功能点分别设计,主窗口只是简单的集成即可。
如下图,其实每一个红色格子是一个单独的UserControl。它们在主界面集成,主界面的代码只有300行
3)使用partial将代码页拆分多部分
这种方法针对于不能通过上面两种方法类实现的。或者更愿意把它们放在一起,对外就提供的单一的入口。比如C#的Math函数(实际的代码页行数或许一个页面可以了,这里为了举例)。
如上图,你可以将三角函数写一个代码页,名为MathOfTrigonometri。将幂积运算写在一个代码页,名为MathOfPower。编程人员如果要怀疑一个数值计算不正确,或者翻译函数让他无法理解(比如他想找Floor函数的同义词,但不清楚是Ceiling),他只要打开相关的代码页,就能大体找到这个函数了。
最后,本段写的是针对底层编程人员,做二次开发关心不了这些内容。