什么样的代码称得上是好代码?
“软件自有其美感所在” --《重构》
@图片:崇礼瀚海梁的山花 拍摄于2022年8月13日 @摄影师:刘先生
这篇内容写作于4年前(2018年),是自己多年软件开发工作的一点感悟,现在看来虽有偏颇,但总体思想方向上并没有改变,抽象是高层次代码的评判标准,诚然,过度的抽象会造成理解困难,但现实情况是,我们的开发人员对代码抽象层次普遍偏低,尽最大的能力向更高一层抽象,能够让代码提升一个水平。不仅仅是代码,整个软件开发过程,包括需求分析,产品设计,架构设计,都可以用抽象程度判断其工作水平的高低。
01
—
抽象是代码水平的标准
朋友指着自己写的代码问:你看我写的代码怎么样,有没有问题,哪里需要修改?
以宽泛的标准讲,只要代码没有逻辑错误,没有明显性能问题,就没有问题,但我知道,他问的不是这些,而是问代码有没有可以更进一步优化的可能,我看他的代码做了清晰的分层,提取了基类,使用了模板模式,总体上算是不错了。
问题来了,究竟什么样的代码算得上是好代码呢?
面对这个问题,可能大多数程序员首先想到的是:高内聚,低耦合,高效率,易维护,易扩展。这些是对的,但这些原则过于模糊,对大部分IT从业者(尤其是刚入行的新人)来说,无法通过一个具体的标准去衡量。
抛开框架和具体技术细节,单纯从编码的角度讲,依我的观点:
面向对象编程,考察的是抽象化的能力。
第一层级的抽象是类。
从实际业务需求入手,将现实世界中的事物,抽象成类,通过类,对象之间的相互调用,完成业务需求,这是面向对象编程最基础的抽象的能力。
第二层级的抽象是基类。
发现类之间的共性,提取基类,抽象类,基类负责处理共性的逻辑,子类负责处理个性的逻辑,从而实现代码的复用,逻辑更清晰,代码更易于维护。
再高一层级的抽象是接口。
接口定义一组标准规范,而不包含任何实现逻辑(C#8.0之后,接口也可以有默认实现了),因此,接口比抽象类的适用范围更广。面向对象开发原则中的“依赖倒置原则”,简单来说,就是要面向接口编程。
更高一层级的抽象是泛型。
为什么将泛型放到比基类和接口更高一层级,因为基类和接口,都只是对其继承者的单一类型的抽象,而泛型,是对多个相互协作类型的抽象,泛型不仅仅是对类型的抽象,还抽象出了多个类型间相互协作行为,正确的使用泛型,能够让代码变得更精炼,逻辑更严谨规范。
好了,以上四个层级,也是简单地给代码划分等级的标准,看看自己写的代码,处于哪一个层级呢。
02
—
后记
当然,并非所有的代码都需要提取基类,定义接口,任何规则都有适用范围。
以上关于抽象化的观点,算是自己多年从事软件开发的一点小小的感悟,希望对你有一定帮助。
更为大家广泛接受的,区分好代码的标准是“面向对象开发原则”和“设计模式”,强烈建议小伙伴们学习掌握,这里不做展开,有兴趣的朋友可以自行搜索。
喜欢的朋友可以点赞,转发,加关注
什么样的代码称得上是好代码?相关推荐
- 实验四:使用库函数API和C代码中嵌入汇编代码两种方式使用同一个系统调用
贺邦+原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 实验目的: 使用库函数 ...
- Lombok!代码简洁神器还是代码“亚健康”元凶?
以下文章来源方志朋的博客,回复"666"获面试宝典 关于Lombok,DD是一个重度用户,从我编写的Spring Boot教程还是Spring Cloud教程中,都可以看到几乎每个 ...
- java中普通代码块,构造代码块,静态代码块的区别及代码示例
本文转自:http://www.cnblogs.com/sophine/p/3531282.html 执行顺序:(优先级从高到低)静态代码块>main方法>构造代码块>构造方法. 其 ...
- Java中普通代码块,构造代码块,静态代码块区别
Java中普通代码块,构造代码块,静态代码块区别及代码 示例 //执行顺序:(优先级从高到低.)静态代码块>mian方法 >构造代码块>构造方法. 其中静态代码块只执行一次.构造代码 ...
- 代码和普通的java_Java中普通代码块,构造代码块,静态代码块区别及代码示例...
对静态代码块以及构造函数的执行先后顺序,一直很迷惑,看了孙伟琴老师的<java面向对象编程>又结合毕老师的java基础视频中的讲解,现用下面的这段小程序来简明扼要的叙述一下,以加深理解,与 ...
- vim代码格式化自动加空格_vim格式化代码实际上就是 缩进代码, 命令是等号=
vim格式化代码实际上就是 "缩进代码", 命令是等号= 格式化就是 vim 根据 文件的类型, 自动的对代码进行 缩进 缩进的类型有多种, 都是用等号命令: = 全部格式化 : ...
- 回滚master代码_[转]Git 代码撤销、回滚到任意版本(当误提代码到本地或master分支时)...
两种情况(场景) 情况一 代码还只在本地,未push到运程仓库,想把代码还原到上一次commit的代码,此时操作为代码撤销 解决方案: 情况二 代码已经push到运程仓库,想把代码还原到上一次提交,此 ...
- 修改vb6的编译器c2.exe使它可以输出汇编代码_xv6笔记-启动代码分析
首先看xv6 commit的第一个makefile OBJS = main.o CC = i386-jos-elf-gcc LD = i386-jos-elf-ld OBJCOPY = i386-jo ...
- c java 开发android_java代码与纯C代码混编完成android应用的开发
在我们这个java与C语言的调用中,分为两个部分, 第一部分是java语言调用C语言的C库,也就是java调C; 第二部分是C语言调用java语言. 这里我主要讲解一下第一种java语言调用C库 这里 ...
最新文章
- 网站推广专员浅析网站推广中网站优化的价值取向究竟为何?
- 读债务危机0804:美国债务危机与调整(2007到2011)-泡沫出现
- aws终止实例后还收费吗_因 AWS 数据中心断电,1TB 数据丢失了
- React Native 第六天
- server2019远程服务器ipv4地址_Windows Server 2019远程桌面服务配置和授权激活
- C语言实现寻找极值点,九之再续:教你一步一步用c语言实现sift算法、上
- 渲染器跑分_这一次会挤牙膏吗?9400F/10400跑分对比
- Entity Framework With Oracle
- Linux——Centos7网络配置1ens33文件
- POJ3420 Quad Tiling(模板+矩阵快速幂)
- edge无法打印pdf_一文搞定PDF无法复制/打印/编辑
- 2019 第二周 开发笔记
- python 读写西门子PLC例子
- 手把手带你入门 Spring Security
- CadenceAllegro16.6绘图软件使用一
- 如何运行jnlp文件
- 阿觿学长带领准大学生们一起走进互联网
- 中国国家气象局天气预报信息接口代码引用详细说明与教程
- 不明所以然,就被KO了,内部人员道出真相,原因竟在这!
- silverlight 得到 控件 鼠标 的位置
热门文章
- marker 头像 高德地图_手机地图导航软件高德地图1.如何下载高德地图
- 大数据培训学习效果好吗
- python 搜索引擎 实验楼的源码_【如何入门 Python 爬虫?】-看准网
- “你说我是错的,那你最好证明你是对的”
- 天池计划task3打卡
- 怎样和领导汇报工作,更容易获得升职加薪?谈谈和领导汇报的艺术
- 从顶级赛事殿堂飞向人间烟火:度小满的NLP技术突破能给小微企业带来什么?...
- php json()函数
- win10开机内存占用80%,内存占用过高
- 比较病程长和短的中轴脊柱关节炎患者接受1年依那西普治疗的临床和炎症预后...