《代码整洁之道》总结与演绎(中)

版权声明:本文为博主原创文章,未经博主允许不得转载,如有问题,欢迎指证。 https://blog.csdn.net/weixin_39076229/article/details/89713678

程序员可以分为三个层次:普通程序员、工程师 、架构师

格式

1、格式的目的

(1)代码格式关乎沟通,而沟通是专业开发者的头等大事;

(2)选用一套管理代码格式的简单规则,然后坚持贯彻执行

(3)团队应该采用一致的格式规则

2、垂直格式

(1)名称应该简单且一目了然,最顶部应该给出高层次概念和算法,细节应该往下渐次展开

(2)在封包声明、导入声明和每个函数之间,都要有空白行隔开

(3)关系密切的概念应该相互靠近,除非有很好的理由,否则不要把关系密切的概念放到不同的文件中

(4)变量声明应尽可能靠近其使用的位置

(5)如果某个函数调用了另外一个,就应该把它们放在一起,而且调用者应该尽可能放在被调用者上面

(6)概念相关的代码应该放到一起,相关性越强,彼此之间的距离就该越短

3、横向格式

(1)应该尽量保持代码行短小,遵循无需拖动滚动条到右边的原则

(2)空格字符加强了分隔效果

对象和数据结构

1、数据抽象

(1)无需暴露数据细节,以抽象的形态表述数据

2、数据、对象的反对称性

(1)对象吧数据隐藏于抽象之后,暴露操作数据的函数

(2)数据结构暴露其数据,没有提供有意义的函数

(3)过程式代码(使用数据结构的代码):便于在不改动既有数据结构的前提下添加新函数

(4)面向对象代码:便于在不改动既有函数的前提下添加新类。

3、得墨忒耳律

(1)模块不应该了解它所操作对象的内部情况,例如面向对象编程,隐藏数据,暴露操作

(2)应当改写连串的调用

final String outputDir = ctxt.getOptions().getScratchDir().getAbsolutePath();

应该改成如下格式:

Options opts = ctxt.getOptions();

File scratchDir = opts.getScratchDir();

final String outputDir = scratchDir.getAbsolutePath();

4、数据传送对象

(1)bean结构,拥有赋值器和取值器操作的私有变量

错误处理

1、使用异常而非返回码

2、先写Try-Catch-Finally语句

(1)在编写可能抛出异常的代码时,先写出Try-Catch-Finally语句

3、使用不可控异常

(1)可控异常的代价是违反开放封闭原则,得到一个从软件最底端贯穿到最高端的修改链

4、给出异常发生的环境说明

(1)你抛出的每个异常应该提供环境说明,以便于判断错误的来源和处所

5、依调用者需要定义异常类

(1)在应用程序中定义异常类,最重要的考虑是它们如何被捕获

6、定义常规流程

(1)特例模式:创建一个类或配置一个对象用来处理特例

7、别返回null值

(1)返回null值,基本上是给自己增加工作量,也是在给调用者添乱,只要一处没有检查null值,应用程序就会失控

(2)如果你打算在方法中返回null值,不如抛出异常,或者返回特例对象

(2)如果调用的某个第三方APi中可能返回null值的方法,可以考虑用新方法打包这个方法,在新方法中抛出异常或返回特例对象

return Collections.emptyList();

8、别传递null值

(1)除非API要求你向它传递null值,否则尽可能避免传递null值

throw InvalidArgumentException( "Invalid argument for ..."

(2)时刻记住参数列表中的null值意味着出问题,从而避免无心之失

边界

1、使用第三方代码

(1)第三方代码帮助我们在更少的时间内发布更丰富的功能

2、浏览和学习边界

3、学习性测试的好处不止是免费

(1)学习性测试能够帮助我们增进对API的理解

(2)当第三方程序包发布了新版本,我们可以运行学习性测试,看看程序包的行为有没有改变

4、使用尚不存在的代码

5、整洁的边界

(1)良好的软件设计无需巨大投入和重写,即可进行修改

(2)边界上的代码需要清晰的分割和定义了期望的测试

(3)依靠你能控制的东西,好过依靠你控制不了的东西,免得日后受它控制。

-------------------------------------------------------------------- end -------------------------------------------------------------------------------------

欢迎关注微信公众号“JAVA万维猿圈”,记录程序员修炼之路,共同学习和成长!

猜你喜欢

转载自blog.csdn.net/weixin_39076229/article/details/89713678