瞎扯抽象

扯淡

抽象是什么,这是一个很难解释的问题,本文纯属瞎扯。

抽象能力对于程序员来说,怎样强调其重要性都不为过,因为软件编码是一种高度智力活动,如果没有较好的抽象能力去洞悉事物的本质,发现规律,发现本质,抽取那些不讲逻辑的业务逻辑中的核心概念,并驾驭这些概念,很难说可以降低编程的复杂度,从而被各种洋洋洒洒的代码,不受控制的逻辑分支,各种泛滥的数据流弄得晕头转向。

我认为抽象是区分一个程序员编程能力最重要体现,是一种需要长期修炼的内功。

抽象不是软件开发创立的概念,人类自然科学理论的进步也正是从对这个世界的观察、实验总结出来的。

牛顿把现实世界复杂的物体运动抽象为经典的物理力学,一条条简单、漂亮的物理公式揭露了现实世界物体复杂的运动规律。
后面发展了各种各样的力学公式,其本质也无非是最简单的牛顿三大力学定律。
在这里插入图片描述

再到后来爱恩斯坦的相对论横空出世,推翻一切,发现越正确的事情越简单越美好。凡事抽象到数学这一层次,所有问题都不是问题了。
物理规律的魅力在于简洁性和普适性。编程也是如此。
在这里插入图片描述

抽象是对规律的总结,抽象的概念应该是简单的,易于人类思考的。人类通过大量的实验去发现这些规律,并总结这些规律。

三体文明为了阻止地球物理的发展,通过降维攻击扰乱地球正常物理现象,让人类无规律可循,从而限制人类的发展。

回到软件开发,抽象的概念更是多如牛毛:
  IO是对输入输出的抽象
 文件系统是对存储在磁盘数据的抽象
 进程,线程是一种抽象
  网络是一种抽象,操作系统是一种抽象,JVM也是一种抽象。
 …
在这里插入图片描述

人们为了规避直接操作二进制机器码的复杂性,不断地往上添加抽象层,最终涌现了各种各样的高级编程语言。

以上有点扯淡。回到我们日常的开发,其实留心的都有发现
好的开源框架都会有好的抽象设计,譬如平时开发用得比较多的日志框架:

首先总体上使用了门面设计模式,对日志操作进行了抽象,分离了不同底层实现细节。

然后提取了一些重要的接口如appender,logger,formatter等等,他们是正交的,具体的实现方式可以独立发展,互不影响,这是一种松耦合的设计,非常易于扩展。
在这里插入图片描述

作为业务员的我们平时也应该对业务代码做适当的抽象和设计,最著名的莫过于GOF的24种设计模式。

但是我们应该避免去为了使用而生硬套用这些设计模式,无招胜有招,我们只需要遵循一些设计的原则去设计;

最核心的就是“发现变化,并且封装这些变化”,对于那些频繁变化但是有共同特征的业务我们可以进行抽象和封装,以便可以轻易的扩展和修改这部分代码,而不影响原有的变化不频繁的代码。

java后端日常开发是三层模型,表现层,service,dao。service承载了大部分的业务逻辑,对于复杂的逻辑,如果把所有的逻辑都平铺在service上则显得不够立体,有种面向过程的味道。

可以从service层出发,对service中的业务逻辑建立起立体的抽象的结构,并在service中进行聚合.

总结

数学是简洁的,物理是美的,抽象是优雅的。

发布了87 篇原创文章 · 获赞 42 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/vipshop_fin_dev/article/details/88383038
今日推荐