如何编写高质量代码

极客时间课程导图

代码质量的评价词

灵活性(flexibility)、可扩展性(extensibility)、可维护性(maintainability)、可读性(readability)、可理解性(understandability)、易修改性(changeability)、可复用(reusability)、可测试性(testability)、模块化(modularity)、高内聚低耦合(high cohesion loose coupling)、高效(high effciency)、高性能(high performance)、安全性(security)、兼容性(compatibility)、易用性(usability)、整洁(clean)、清晰(clarity)、简单(simple)、直接(straightforward)、少即是多(less code is more)、文档详尽(well-documented)、分层清晰(well-layered)、正确性(correctness、bug free)、健壮性(robustness)、鲁棒性(robustness)、可用性(reliability)、可伸缩性(scalability)、稳定性(stability)、优雅(elegant)、好(good)、坏(bad)

面向对象

面向对象和面向过程是编程范式(方法),不局限于编程语言,即使语言不是面向对象的语言。面向过程语言的特点是不支持丰富的面向对象编程特性(继承,多台,封装)。

面向对象编程语言更适用于大规模复杂应用。二进制指令,汇编语言,面向过程语言,是一种计算机思维方式,面向对象是一种人类思维方式,需要对业务建模,将现实的世界的事物,映射为类或对象,将开发者聚焦业务本身,而不是思考如何和机器打交道。

面向对象编程比面向过程编程,更加容易应对大规模复杂程序的开发。但像 Unix、Linux 这些复杂的系统,也都是基于 C 语言这种面向过程的编程语言开发的,你怎么看待这个现象?

取决于需求是业务复杂度,还是技术复杂度

1.面向过程的编程语言不代表不能实现面向对象思想 2.操作系统的复杂相对于业务系统的快速开发迭代是另一个维度复杂,基础系统更看重性能和稳定,而业务系统看重的是维护,复用,拓展。3.操作系统是要频繁跟硬件打交道的,“低级”的语言更快更简洁

面向过程风格代码转换面向对象风格,规律总结,

函数等于类方法,复用的变量等于类型属性

并不是代码封装成类,就是面向对象编程:滥用geter,setter

封装、抽象、继承、多态分别可以解决哪些编程问题

封装:通过访问控制语法提供数据访问保护,隐藏内部数据,外部仅能通过类有限的结果访问修改内部数据。调用者无需关心业务的细节,调用就可以了。

抽象:基于interfaceabstract语法,更好的实现封装的方法,隐藏实现细节,是封装的具体实现。

继承:获取父类的方法和属性,复用代码,使用时要避免过度继承和高度耦合

多态:基于,父类可以引用子类,支持继承语法,子类可以重写(override)父类中的方法的语法机制实现多态特性。可以基于interface类实现,提高代码扩展性和复用性

接口和抽象类,基于接口而非实现编程

组合优于继承

贫血模型和充血模型

设计模式

随着编程语言的演进,一些设计模式(比如 Singleton)也随之过时,甚至成了反模式,一些则被内置在编程语言中(比如 Iterator),另外还有一些新的模式诞生(比如 Monostate)。

反面模式 明显出现但又低效或是有待优化的设计模式,是用来解决问题的带有共同性的不良方法

PHP设计模式全集 github源码

单例模式 在应用程序调用的时候,只能获得一个对象实例

场景:数据库连接 日志 在应用中锁定文件 线程池(threadpool)、缓存(cache)、对话框、处理偏好设置和注册表(register)对象

laravel中服务容器注册单例类 simps-swoole使用单例trait来实现单例

UML统一建模语言

30分钟学会uml类图 uml类图符合说明图

泛化、实现、关联、聚合、组合、依赖

laravel request dd 结果

uml类图符号的作用,以laravel框架的request类 dd($request)结果为示例,“+”表示 public ,“-”表示 private, “#”表示 protected ,不带符号表示 default

其它

库与框架的区别

参考教程

极客时间教程 设计模式之美 软件设计之美 软件工程之美

图说设计模式