目录
1.1 代码质量好坏如何评价?
1 ) 可维护性
可维护性强的代码指的是: 在不去破坏原有的代码设计以及不引入新的BUG的前提下,能够快速的修改或者新增代码.
不易维护的代码指的是: 在添加或者修改一些功能逻辑的时候,存在极大的引入新的BUG的风险,并且需要花费的时间也很长.
2 ) 可读性
软件开发教父,Martin Fowler曾经说过一句话: "任何傻瓜都能够编写计算机能理解的代码,而优秀的程序员能够编写人类能理解的代码。" 这句话的意思非常容易理解,就是要求我们写出的代码是易读的、易理解的,因为代码的可读性会在很大程度上影响代码的可维护行性.
使用idea开发的同学建议添加 “Alibaba Java Coding Guidelines”,阿里提供的开发代码规范的检查插件,有助于提高代码的可读性。
3 ) 可扩展性
代码的可扩展性表示,我们在不修改或少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。
对修改关闭,对扩展开放
4 ) 灵活性
"灵活" 是指在添加新代码的时候,已有代码能够不受影响,不产生冲突,不出现排斥,在保证自身不遭到破坏的前提下灵活地接纳新代码。
5 ) 简洁性
我们要遵从KISS ( Keep It Simple Stupid) 原则,代码要尽可能的简单;但是思从深而行从简,真正的高手能云淡风轻地用最简单的方法解决最复杂的问题。这也是一个编程老手跟编程新手的本质区别之一。
6 ) 可复用性
代码的可复用性可以简单地理解为,尽量减少重复代码的编写,复用已有的代码.
复用代码,切记不能盲目复用他人代码,要了解复用代码的处理逻辑,避免导致出现各种其他的问题。例如,包含事务的方法,避免事务失效。
7 ) 可测试性
单元测试在一个完整的软件开发流程中是必不可少的、非常重要的一个环节。通常写单元测试并不难,但有的时候,有的代码和功能难以测试,导致写起测试来困难重重。所以写出的代码具有可测试性,具有很重要的作用。
1.2 编程方法论
要拥有编写高质量代码的能力,我们就要学习一些编程的方法论.其中就包含面向对象(我们可以把它看成一种设计思想)、设计原则、设计模式、编程规范、重构技巧等等
1 ) 面向对象
面向对象是一种编程思想,也是一种编程范式. 现在比较流行的编程语言大部分都是面向对象编程语言.而大部分项目也都是基于面向对象编程风格进行开发的.
2 ) 设计原则
设计原则是指导我们代码设计的一些经验总结。在软件开发中,为了提高软件系统的可维护性和可复用性,增加软件的可扩展性和灵活性,程序员要尽量根据设计原则来开发程序,从而提高软件开发效率、节约软件开发成本和维护成本。
常用的设计原则
- 单一职责原则
- 开闭原则
- 里氏代换原则
- 依赖倒转原则
- 接口隔离原则
- 迪米特法则
3 ) 设计模式
设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思 路。大部分设计模式要解决的都是代码的可扩展性问题。
4 ) 编程规范
编程规范主要解决的是代码的可读性问题。编码规范相对于设计原则、设计模式,更加具体、更加偏重代码细节。
5 ) 重构
极限编程或其他敏捷方法学中,重构常常是软件开发循环的一部分:开发者轮流增加新的测试和功能,并重构代码来增进内部的清晰性和一致性。
6 ) 总结
提高代码质量的方法论包含:
- 面向对象思想 (基础)
- 设计原则 (指导方针)
- 设计模式 (设计原则的具体实现)
- 编程规范 (提高代码可读性)
- 重构 (面向对象设计思想、设计原则、设计模式、编码规范的融合贯通)
1.3 设计模式概述
- 设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结
-
大部分设计模式要解决的都是代码的可重用性、可扩展性问题
-
学习设计模式的好处
-
能够从容应对面试中的设计模式相关问题
-
不再编写 bullshit-code
-
提高复杂代码的设计和开发能力
-
有助于我们读懂源码,学习框架更加事半功倍
-
1.4 产生背景
"设计模式" 最初并不是出现在软件设计中,而是被用于建筑领域的设计中。
1.5 设计模式分类
设计模式只有23个,但是它们各具特色 ,每个模式都为某一个可重复的设计问题提供了一套解决方案。
根据它们的用途,设计模式可分为 创建型(Creational) ,结构型(Structural) 和行为型(Behavioral)
创建型模式(5种):提供创建对象的机制,提升已有代码的灵活性和可复用性
常用的有:单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式。
不常用的有:原型模式。
结构型模式(7种):介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效
常用的有:代理模式、桥接模式、装饰者模式、适配器模式。
不常用的有:门面模式、组合模式、享元模式。
行为模式(11种):负责对象间的高效沟通和职责传递委派
常用的有:观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式。
不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。