设计模式
2022-04-15 本文已影响0人
Zeppelin421
为什么学设计模式
如何分层、分模块?应该怎么划分类?每个类应该具有哪些属性、方法?怎么设计类之间的交互?该用继承还是组合?该使用接口还是抽象类?怎样做到解耦、高内聚低耦合?该用单例模式还是静态方法?用工厂模式创建对象还是直接 new 出来?如何避免引入设计模式提高扩展性的同时带来的降低可读性问题?
告别写被人吐槽的烂代码;提高复杂代码的设计和开发能力;让读源码、学框架事半功倍;为你的职场发展做铺垫
代码质量
什么是高质量代码
代码质量的评价有很强的的主观性,描述代码质量的词汇也有很多,常用的几个评判代码质量的标准有:
-
可维护性(maintainability)
在不破坏原有代码设计、不引入新的BUG的情况下,能够快速地修改或者添加代码。可维护性也是一个很难量化、偏向对代码整体的评价标准。如果代码分层清晰、模块化好、高内聚低耦合、遵从基于接口而非实现编程的设计原则等,那就意味着代码易维护。代码易维护还跟项目代码量、业务复杂度、技术复杂度、文档是否齐全、团队成员能力水平等诸多因素相关。 -
可读性(readability)
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.”
代码是否符合编码规范、命名是否达意、注释是否详尽、函数是否长短合适、模块划分是否清晰、是否符合高内聚低耦合 -
可扩展性(extensible)
在不修改或少量修改原有代码的情况下,通过扩展的方式添加新的功能代码。简单说就是,代码预留了一些功能扩展点,你可以把新功能代码直接插到扩展点上,而不需要因为要添加一个功能而大动干戈,改动大量的原始代码 -
灵活性(flexibility)
一段代码易扩展、易复用或者易用都可称为比较灵活 -
简洁性(simplicity)
KISS原则:“Keep It Simple,Stupid”。尽量保持代码简单、逻辑清晰
思从深而行从简,真正的高手能云淡风轻地用最简单的方法解决最复杂的问题 -
可复用性(reusable)
尽量减少重复代码的编写,复用已有的代码 -
可测试性(testability)
代码可测试性好坏,能从侧面非常准确地反应代码质量的好坏。代码的可测试性差,比较难写单元测试,那基本上就能说明代码设计得有问题
如何写出高质量代码
要写出高质量代码,我们就需要掌握一些更加细化、更加能落地的编程方法论,这就包括:面向设计思想、设计原则、设计模式、编程规范、重构技巧等等。
-
面向对象
主流编程范式或者编程风格有三种:面向过程、面向对象和函数式编程。面向对象编程因为其具有丰富的特性(封装、抽象、继承、多态),可以实现很多复杂的设计思路,是很多设计原则、设计模式等编码实现的基础。 -
设计原则
设计原则是指导我们代码设计的一些经验总结,对于某些场景下,是否应该应用某种设计模式,具有指导意义。比如:“开闭原则”是很多设计模式(策略、模板等)的指导原则。设计原则有个非常大的特点,那就是这些原则听起来都比较抽象,定义描述都比较模糊,不同的人会有不同的解读。 -
设计模式
设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或设计思路。应用设计模式的主要目的是提高代码的可扩展性。从抽象程度上来讲,设计原则比设计模式更抽象。设计模式更加具体、更加可执行。 -
编程规范
编程规范主要解决的是代码的可读性问题。编程规范相对于设计原则、设计模式,更加具体、更加偏重代码细节、更加能落地。比如:如何给变量、类、函数命名,如何写代码注释,函数不宜过长、参数不能过多等。持续的小重构依赖的理论基础主要就是编程规范。 -
代码重构
只要软件不停地迭代,就没有一劳永逸的设计。随着需求的变化,代码不停堆砌,原有的设计必定会存在这样那样的问题。针对这些问题,需要进行代码重构。重构是软件开发中非常重要的一个环节。持续重构是保持代码质量不下降的有效手段,能有效避免代码腐化到无可救药的地步。它利用的就是面向对象、设计原则、设计模式、编程规范这些理论。
