前言
文章目录
1.学习设计模式的好处
-
应对面试中的设计模式相关问题
-
告别被别人吐槽的烂代码
-
提高复杂代码的设计和开发能力
如何分层、分模块?应该怎么划分类?每个类应该具有哪些属性、方法?怎么设计类之间的交互?该用继承还是组合?该使用接口还是抽象类?怎样做到解耦、高内聚低耦合?该用单例模式还是静态方法?用工厂模式创建对象还是直接new出来?如何避免引入设计模式提高扩展性的同时带来的降低可读性问题?
-
让读源码、学框架事半功倍
-
为职场发展做铺垫
2.如何评价代码质量的高低
-
描述代码质量的常用词汇:
灵活性、可扩展性、可维护性、可读性、可复用、可测试性、模块化、高内聚低耦合、高效、安全性、兼容性、易用性、整洁、清晰、简单、直接、少即是多、文档详尽、分层清晰、正确性、健壮性、鲁棒性、稳定性、优雅。。。
2.1代码质量评价的特点和难点
- 不同的词汇从不同的维度对代码进行评价,很难通过其中的某个或者某几个词汇来全面评价代码质量。
- 不同的评价维度并不完全独立,有些具有包含关系、重叠关系或者影响关系。
- 代码质量的评价因评价人的不同具有主观性。
2.2常用、重要的几个评价标准
-
可维护性 maintainability
维护代码指:修改bug、修改老的代码、添加新的代码等工作。
“代码易维护”指:在不破坏原有代码设计、不引入新的bug的情况下,能够快速的修改或者添加代码。
“代码不易维护”指:修改或者添加代码需要冒着极大的引入新bug的风险,并且需要花费很长的时间才能完成。
如何判断代码的可维护性:代码的可维护性是很多因素协同作用的结果。代码的可读性好、简洁、可扩展性好,就会使得代码易维护;相反,就会使得代码不易维护。如果代码分层清晰、模块化好、高内聚低耦合、遵从基于接口而非实现编程的设计原则等等,就意味着代码易维护。除此之外,代码的易维护性还跟项目代码量的多少、业务的复杂程度、利用到的技术的复杂程度、文档是否全面、团队成员的开发水平等诸多因素有关。
-
可读性 readability
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”
可读性是评价代码质量最重要的指标之一,代码的可读性在很大程度上会影响代码的可维护性。
如何评价代码的可读性:是否符合编码规范、命名是否达意、注释是否详尽、函数是否长短合适、模块划分是否清晰、是否符合高内聚低耦合等等。
code review是一个很好的测验代码可读性的手段。
-
可扩展性 extensibility
可扩展性表示代码应对未来需求变化的能力,在很大程度上决定代码是否易于维护。
代码的可扩展性表示,在不修改或者少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。
设计原则“对修改关闭,对扩展开放”。
-
简洁性 simplicity
KISS设计原则:“Keep It Simple, Stupid”,意为尽量保持代码简单。代码简单、逻辑清晰意味着可读性好、易维护。
-
可复用性 reusability
代码的可复用性为:尽量减少重复代码的编写,复用已有的代码。
比如,在编程语言的面向对象(OOP)特性中,继承、多态存在的目的之一就是为了提高代码的可复用性;在设计原则中,单一职责原则与代码的可复用性有关;在重构技巧中,解耦、高内聚、模块化能提高代码的可复用性。可复用性是很多设计原则、思想、模式等所要达到的最终效果。
DRY设计原则:“Don’t Repeat Yourself”。
-
可测试性 testability
2.3 如何写出高质量的代码
如何写出易维护、易读、易扩展、简洁、可复用、可测试的代码:掌握一些编程方法论,包括面向对象设计思想、设计原则、设计模式、编码规范、重构技巧等。
3.学习大纲
3.1 面向对象设计思想
- 面向对象的四大特性:封装、抽象、继承、多态
- 面向对象编程和面向过程编程的区别和联系
- 面向对象分析、面向对象设计、面向对象编程
- 接口和抽象类的区别以及各自的应用场景
- 基于接口而非实现编程的设计思想
- 多用组合少用继承的设计思想
- 面向过程的贫血模型和面向对象的充血模型
3.2 设计原则
- SOLID原则 - SRP 单一职责原则
- SOLID原则 - OCP 开闭原则
- SOLID原则 - LSP 里式替换原则
- SOLID原则 - ISP 接口隔离原则
- SOLID原则 - DIP 依赖倒置原则
- DRY原则、KISS原则、YAGNI原则、LOD法则
3.3 设计模式
设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。大部分设计模式要解决的都是代码的可扩展性问题。
23种经典的设计模式:
类型 | 常见 | 不常见 |
---|---|---|
创建型 | 单例模式、工厂模式(工厂方法和抽象工厂)、建造者模式 | 原型模式 |
结构型 | 代理模式、桥接模式、装饰者模式、适配器模式 | 门面模式、组合模式、享元模式 |
行为型 | 观察者模式、模板模式、策略模式、职责链模式、迭代器模式、状态模式 | 访问者模式、备忘录模式、命令模式、解释器模式、中介模式 |
3.4 编程规范
编程规范主要解决的是代码的可读性问题。可以参考书籍《重构》、《代码大全》、《代码整洁之道》。
20条最快速改善代码质量的编程规范。
3.5 代码重构
- 重构的目的(why)、对象(what)、时机(when)、方法(how)。
- 保证重构不出错的技术手段:单元测试和代码的可测试性。
- 两种不同规模的重构:大重构(大规模高层次)和小重构(小规模低层次)。
五者之间的联系
- OOP依据四大特性可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。
- 设计原则是很多设计模式的指导原则。
- 设计模式相比设计原则更加具体、更加可执行。
- 编程规范相对于设计原则和设计模式,更加具体、更加注重代码细节、更加能落地。
- 重构利用的就是面向对象、设计原则、设计模式、编码规范这些理论。