面向对象这个概念是从接触编程开始就会学到的一个概念,它到底是什么意思呢?
仁者见仁智者见智了,这里不谈面向对象具体的编码,只说它的思维。
以前觉得很简单,工作了一段时间觉得有些困难,现在觉得能搞明白用好来真是太难了。
面向对象到底是什么呢?
在现在大多数都为业务开发程序员(维护业务模块的开发)来说:
面向对象就是面向业务边界的抽象编程。
怎么理解这句话呢?
抓住重点,对业务边界的抽象。
我们首先要先理解抽象是什么意思?
抽象就是将复杂事物封装成简单易用的状态。
举个例子:
电脑的发展离不开CPU,那么你知道CPU是如何一步一步变成现在这个样子的吗?
我们知道CPU内部有很多电路,有与门,非门,异或门等,由它们抽象成了加法器等各种封装好的电路,然后由各种封装好的电路组成了ALU,再和其他部件一起封装成了CPU。
看到你应该能抓到一点边了,硬件的发展其实也离不开更高层级的抽象,也就是隐藏细节提供功能的封装,重点是区分各硬件的边界在哪。
再来看看我们编程语言的发展:
早期的汇编码是提供给早期程序员的一套简单操作电脑硬件的方式,是对使用CPU的封装。
C语言则是提供给了后面的程序员更容易操作汇编码的封装,解决的是编写程序困难的问题。
以上是为了说明对事物高层次的抽象可以让我们更加方便的理解和使用。
回到我们开发本身(指业务开发),我们抽象的目标是什么?
没错,就是你负责的业务。
那怎么抽象呢?
其实没有别的办法,只有一条路,尽力了解清楚业务的全貌,了解它们的业务边界。
这样我们才能有的放矢的将它们进行抽象。
你可能会说这不是在脱了裤子放屁吗,好像说了什么又好像没说什么,搁这搁这呢。
是有这样的嫌疑,但是抽象的过程确实困难无比,每个人面对的业务问题也是不同的。
我在这只能提供一个思路,我平时是如何对业务边界进行抽象的呢?
其实刚了解业务的时候是没办法抽象好的,只有等你了解了各个业务线的业务平时工作的边界在哪的时候才有了一点抽象的基础。
比如,售后业务,因为我做了2年左右的售后业务线,我知道售后完整流程都有哪些人员参与,它们分别负责什么,边界是什么,我才能稍微抽象出各个阶段的类出来。
这里拿售后客服举一个例子:
售后首先要有售后客服审核售后单据,那么她的边界就是审核,填写相关备注,修改地址,更改售后类型等功能。
但是我们会用这个抽象结果去修改代码吗?
不会的,业务唯一不变的就是永远在变化,没有把握做好扩展性的抽象就不要去改祖传代码,我们能做的就是对于小的,不变的东西进行抽象的编程,对于大的,易变的就要慎重考虑了。
所以,面向对象编程对业务开发来说是很难去实践的一个东西,但是面向对象思考是非常值得做的一件事情。
对于业务开发来说,了解业务远比研究技术要重要的多,技术以满足实际问题为主要方向,面试的话另说。
总结
总的来说,具备面向对象的思维比编程更加重要,思维才是我们应该掌握的核心。
如果觉得有启发,还请点个赞或者评论一下,让我知道改进的地方。