能否快速被理解(可读性)
最重要的一点,主要考虑以下几个部分。
命名以及代码格式是否整洁
逻辑是否清晰
注释:(仅当代码动机(why,NOT what ,NOT how)不确定的话需要写)
单一职责
代码职责是否清晰并单一类或方法是否太大需要拆分
代码重复
重复代码需要被提出来
可测试性
代码依赖是否可注入,每个功能是否容易做单元测试
所有实现是否都是可替换
异常处理
异常有没有被handle并log
性能
代码会不会有性能问题(多线程环境或高并发情况)
安全
是否存在安全漏洞(网络,数据库)
对代码质量要求更高的项目,可能还需考虑以下几点
SOLID
单一职责(Single Responsibility)
开闭原则(Open close)
里氏代换(Liskov substitution)对象的可替代性
接口分离(Interface Segregation)
对抽象进行细分。大接口拆分成多个功能更小的接口。
依赖反转(Dependency Inverion)
依赖抽象而非实现。
GRASP原则
Creator(对象的创建)
对象统一创建(工厂)
高内聚(高扇入)
提高类(库)的被使用次数。
低耦合(低扇出)
对外部依赖较少(少于3个接口)
Information Expert (信息专家)
单一信息来源。每种信息的来源是一致的
是否把相关的信息都放在了一个位置
可扩展性
系统的每层是否有足够的抽象来支持横向扩展
抽象的层次是否足够来满足纵向扩展
可配置性
哪些项是希望放入配置的
是否已经有方案来管理这些配置