代码抽象
代码抽象是的很大的话题,本文就是通过个人的经验进行部分的阐述。
代码分级
在我眼里吧,程序员的发展分成3个历程。
历程1
这个时候的你肯定是刚学会写代码,如果你学会的是python,你觉得你有改变世界的能力。
这个时候面对一个东西,毫不犹豫的将代码写成一堆,快速实现功能,然后开始秀秀自己的东西实现的功能,ok,你可以理解为产品需求实现了,写着写着你发现你的代码中常常有一些东西是很多地方都要使用的,然后你陷入了复制粘贴中,然后你复制粘贴的东西就是你的坑,每次修改你都要修改好多地方,直到你忘记了该修改什么。
历程2
如果你身边有个有些经验的人,你可能比较开心了,他会告诉你,你可以抽象工具呀。把经常用到的东西做成一个工具,这样需要修改工具就改一个地方就够了。
但是这个是结束吗?当然不是了,你的代码就分了二层呢?工具一层,业务一层。业务之间依赖太大,工具类形同虚设,这个时候你该怎么办呢?
历程3
这时候你要了解面向对象的方式,对象的特性是什么?对, 继承,继承能够从一条线中提出来若干公用的东西作为父类,如果你需要这个方法,你要继承一个类,然后在业务逻辑中使用这些方法,瞬间感觉和飞一样。
你会不会问,那接口是干嘛的?就我的理解,接口实际上就是规范,某种意义上讲其实是架构,哪些接口需要流出来,想好沟通方式,这个接口是广义的,系统之间的接口以及程序内部的接口,都是一种思想,按照我们的逻辑,实现了所有的接口,整个工程就是结束了。
感觉成长了,你的代码开始有了抽象、对象、继承这些再也不是纸上谈兵的东西了。那这种代码会带来哪些好处呢?核心就迭代,代码要成功就要可迭代,但是迭代的根本就是你的代码就是一气呵成,否则迭代无异于打洞,等有一天修不了,就会重构,其实理论上重构是不可避免的,因为你不知道你的系统发展成什么样子,初始结构设计的好,确实能无限推迟重构的时间,毕竟我们都不想谈重构的事情。
小陷阱
是不是手痒痒,想让大家看看你的代码能力了?一旦你有了这样的想法,估计你离过度抽象就不远了,什么是过度抽象,你不考虑当前的业务场景,无限抽象,觉得任何地方都会留接口,封对象,最后你的代码被打成一节一节的,无法维护,和历程1差不多的结果。
本质
本质而言,我觉得一个老司机,是要做到结合业务,技术等多方面的因素去抽象自己的代码,找到最适合的方式。什么时候你留的接口是有用的,你抽象的对象是有用的?等你真正需要的时候。
举个例子
看到火车了没有,咱们举个例子,如果A->B是一条直线,那我们创造火车的时候可以是一个桶状的东西,但是现实中我们有A->C,A->D,都不是直线的,所以注定了我们的火车不会是那么简单,我们想要转弯,所以咱们必须分节,如果你过度抽象,把火车弄成1m一节,那成本将无限放大,就和写代码一样,你要找到你火车的具体的分节的方案,最后才能让你的火车无往不利。